Jus*_*tin 3 php roles mass-assignment laravel laravel-4
我有一个带有Users表的Users表的应用程序:id|name|email|is_admin.我希望管理员能够将其他用户设置为管理员.
在models/User.php我防止大规模分配:
protected $fillable = ['name', 'email'];
Run Code Online (Sandbox Code Playgroud)
Laravel 4基于角色的质量分配得出结论,Laravel没有这样的功能.
我的问题是,什么是可行的解决方案?如何才允许管理员更新数据库中的"is_admin"列?
扩展您的用户模型以创建没有批量分配保护的仅限管理员的版本.
在新类中,覆盖$fillable属性:
class UnprotectedUser extends User
{
protected $fillable = [<all fields>];
}
Run Code Online (Sandbox Code Playgroud)
然后在管理员特定代码中使用新模型:
$user = UnprotectedUser::create($arrayOfAllFields);
Run Code Online (Sandbox Code Playgroud)
务必在尽可能多的地方使用原始课程,以便继续利用质量分配保护.
其实就是下面的代码:
protected $fillable = ['name', 'email'];
Run Code Online (Sandbox Code Playgroud)
将阻止Mass-Assignment这意味着有人不能使用这样的东西:
User::create(['name' => 'xxx', 'email' =>'x@mail.com', 'is_admin' => 1]);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该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();
Run Code Online (Sandbox Code Playgroud)
User所以这样更新就不会出现问题了。
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |