我的应用包含一个包含列的用户表:id|name|email|is_admin
。我希望管理员能够将其他用户设置为管理员。
在models/User.php
中我通过以下方式阻止批量分配:
protected $fillable = ['name', 'email'];
Laravel 4 Role Based Mass Assignment得出结论,Laravel没有这样的功能。
我的问题是,什么是可行的解决方案?如何才允许管理员更新列' is_admin'在我的数据库中?
答案 0 :(得分:5)
扩展您的用户模型以创建没有批量分配保护的仅管理员版本。
在新课程中,覆盖$fillable
属性:
class UnprotectedUser extends User
{
protected $fillable = [<all fields>];
}
然后在管理员特定代码中使用新模型:
$user = UnprotectedUser::create($arrayOfAllFields);
请务必在尽可能多的地方使用原始课程,以便继续利用质量分配保护。
答案 1 :(得分:3)
实际上,以下代码:
protected $fillable = ['name', 'email'];
会阻止来自Mass-Assignment
,这意味着有人不能使用这样的内容:
User::create(['name' => 'xxx', 'email' =>'x@mail.com', 'is_admin' => 1]);
在这种情况下,is_admin
字段不会更新,但仍然可以使用类似的东西做同样的事情(它不是Mass Assignment
):
$user = User::find($id); // Or $user = new User; (when creating a new user);
$user->name = 'xxx';
$user->email = 'x@mail.com';
$user->is_admin = 1;
$user->save();
因此,以这种方式更新User
没有问题。