@NewSantaClaus

Как назначить права на изменение полей в Laravel?

Привет

Есть контролер где store успешно регистрирует нового пользователя. И здесь все хорошо.

Но вот с обновлением есть сложности. Все потому что в request установлены все поля как обязательные. Но я хотел бы иметь возможность обновлять только указанные поля. К примеру, я хочу обновить пароль, остальное трогать не нужно, и так далее. К тому же я бы хотел иметь возможность чтобы поле role_id мог обновлять только администратор, но не как не сам пользователь.

Прошу помощи у коллег. Подскажите или покажите как я могу это сделать?

Контроллер:
class UserController extends Controller
{
    public function store(UserRequest $request)
    {
        $validated = $request->validated();

        $user = User::create(
            array_merge(
                $validated,
                ['password' => bcrypt($validated['password'])]
            )
        );

        return new UserResource($user);
    }

    public function update(UserRequest $request, User $user)
    {
        $user->update($request->validated());

        return new UserResource($user);
    }
}


Request:
class UserRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'email' => 'required|string|email|unique:users',
            'first_name' => 'required|string|min:2|max:20',
            'last_name' => 'required|string|min:3|max:20',
            'password' => 'required|string|min:6|max:255',
            'role_id' => 'required|integer|exists:roles,id'
        ];
    }
}
  • Вопрос задан
  • 223 просмотра
Решения вопроса 1
@Kostik_1993
Web Developer
Сделайте два класса CreateUserRequest и UpadateUserRequest в одном все поля required во втором sometimes или nullable если могут быть пустыми
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ALonUa

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

Создайте миддлвар для админа и сгруппируйте в него роут, который принимает пост запрос и обращается к контролеру.

К примеру, я хочу обновить пароль, остальное трогать не нужно, и так далее.

При рендеринге формы, сделайте так, чтобы значения инпутов были автоматом заполнены. Так, если админ не будет менять поля, то они отправятся в запрос не измененными, а те которые изменялись, поменять запись в таблице
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы