Массовое задание Laravel для администраторов

У меня есть приложение с таблицей пользователей со столбцами: id|name|email|is_admin, Я хочу, чтобы администраторы могли назначать других пользователей администраторами.

В models/User.php Я предотвращаю массовое назначение с:

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

Laravel 4 Ролевое массовое задание приходит к выводу, что Laravel не имеет такой функции.

Мой вопрос что такое жизнеспособный обходной путь? Как я могу разрешить только администраторам обновлять столбец is_admin в моей базе данных?

3

Решение

Расширьте свою модель User, чтобы создать версию только для администратора без защиты от массовых назначений.

В новом классе переопределите $fillable имущество:

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

Затем используйте новую модель в вашем специфичном для администратора коде:

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

Обязательно используйте исходный класс в как можно большем количестве мест, чтобы вы могли продолжать пользоваться преимуществами защиты от массовых назначений.

5

Другие решения

Собственно, следующий код:

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 вот так.

3

По вопросам рекламы [email protected]