更新 Laravel 模型中的不可填充字段

TKo*_*KoL 5 php laravel eloquent

我有我的 User 表,当你完成所有工作时 laravel 附带的默认表php artisan make:auth,并且我添加了一个布尔system_admin列和其他几个类似的列

现在,当有人注册到该网站时,我不希望恶意者能够授予自己该权利,因此我没有将该字段放入fillableUser.php 模型文件的数组中。

那么第一个问题:这是出于正确原因的正确决定吗?

但现在我正在开发一个系统管理页面,它应该允许人们修改类似的属性,但在我的路线中,只能由系统管理员访问,我的代码如下所示:

public function updateUser($userId, Request $request) {
        $user = User::find($userId);
        $update = $request->all();
        $user->update($update);
Run Code Online (Sandbox Code Playgroud)

当然,因为这些列不是fillable,所以此请求不适用于这些字段。

但我想要它,因为这个特定的路由受到中间件的保护,该中间件验证 system_admin 是否应该有权访问它。

那么,如何更新这些不可填写的列,而又不允许非系统管理员更新相同的列呢?

TKo*_*KoL 3

我使用 lagbox 答案提出了一个替代解决方案,该解决方案遍历我的路线中的每个更新变量键:

public function updateUser($userId, Request $request) {
    $user = User::find($userId);
    $update = $request->all();
    foreach($update as $key => $value) {
        $user->$key = $value;
    }
    $user->save();

    $newUser = User::find($userId);
    return response()->json($newUser->toJson());
}
Run Code Online (Sandbox Code Playgroud)

我希望这样做不会有什么问题。