2014-09-26 91 views
3

我有一個應用程序與列用戶表:id|name|email|is_admin。我希望管理員能夠將其他用戶設置爲管理員。Laravel管理員質量分配

models/User.php我防止大規模分配有:

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

Laravel 4 Role Based Mass Assignment的結論是Laravel有沒有這樣的功能。

我的問題是,什麼是可行的解決辦法?我如何只允許管理員更新數據庫中的'is_admin'列?

回答

5

將您的用戶模型擴展爲創建僅限管理員的版本,而不使用質量分配保護。

在新的類,覆蓋$fillable屬性:

class UnprotectedUser extends User 
{ 
    protected $fillable = [<all fields>]; 
} 

然後使用您的特定管理代碼的新模式:

$user = UnprotectedUser::create($arrayOfAllFields); 

一定要使用原始類的許多儘可能放置,以便您可以繼續利用質量保護。

+2

這是一個很好的答案,因爲它允許您繼續使用內置的:: create()功能進行批量分配。 – Justin 2014-09-29 18:23:07

3

其實,下面的代碼:

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

將防止Mass-Assignment這意味着,一個人不能使用這樣的事情:

User::create(['name' => 'xxx', 'email' =>'[email protected]', '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 = '[email protected]'; 
$user->is_admin = 1; 
$user->save(); 

因此,像這樣更新User就沒有問題了。

+2

我最終使用這個答案,因爲它允許模型更靈活。例如。在更新()我想只修改用戶密碼,如果一個新的傳入。 – Justin 2014-09-29 18:25:28