管理员的Laravel Mass Assignment

时间:2014-09-26 20:49:52

标签: php laravel laravel-4 roles mass-assignment

我的应用包含一个包含列的用户表:id|name|email|is_admin。我希望管理员能够将其他用户设置为管理员。

models/User.php中我通过以下方式阻止批量分配:

protected $fillable = ['name', 'email'];

Laravel 4 Role Based Mass Assignment得出结论,Laravel没有这样的功能。

我的问题是,什么是可行的解决方案?如何才允许管理员更新列' is_admin'在我的数据库中?

2 个答案:

答案 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没有问题。