У меня есть приложение с таблицей пользователей со столбцами: id|name|email|is_admin
, Я хочу, чтобы администраторы могли назначать других пользователей администраторами.
В models/User.php
Я предотвращаю массовое назначение с:
protected $fillable = ['name', 'email'];
Laravel 4 Ролевое массовое задание приходит к выводу, что Laravel не имеет такой функции.
Мой вопрос что такое жизнеспособный обходной путь? Как я могу разрешить только администраторам обновлять столбец is_admin в моей базе данных?
Расширьте свою модель User, чтобы создать версию только для администратора без защиты от массовых назначений.
В новом классе переопределите $fillable
имущество:
class UnprotectedUser extends User
{
protected $fillable = [<all fields>];
}
Затем используйте новую модель в вашем специфичном для администратора коде:
$user = UnprotectedUser::create($arrayOfAllFields);
Обязательно используйте исходный класс в как можно большем количестве мест, чтобы вы могли продолжать пользоваться преимуществами защиты от массовых назначений.
Собственно, следующий код:
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
вот так.