Каков наилучший шаблон или подход для обработки ACL в Eloquent Models? - PullRequest
1 голос
/ 17 мая 2019

Я создаю REST API с использованием Laravel, в котором есть несколько параметров для конечной точки в зависимости от роли пользователя.

В настоящее время проверяет это в Сервисах, используя условия if.

class UserService
{
    public function update(array $attribute, $userId)
    {
        $userRepository = app(\App\Repositories\UserRepositoryInterface::class);
        $user = $userRepository->get($userId);
        $allowedUpdatableFieldForTeachers = ['name', 'age', 'graduated_at'];
        $allowedUpdatableFieldForSupervisor = ['name', 'age', 'graduated_at', 'balance', 'salary'];
        if ($user->role == 'teacher') {
            $userRepository->update(Arr::only($attribute, $allowedUpdatableFieldForTeachers), $userId);
        }
        if ($user->role == 'supervisor') {
            $userRepository->update(Arr::only($attribute, $allowedUpdatableFieldForSupervisor), $userId);
        }
    }
}

Однако это нарушает принцип единой ответственности. Итак, какова лучшая практика / шаблон для решения этой проблемы.

1 Ответ

0 голосов
/ 17 мая 2019

SRP не распространяется на все классы в вашем программном обеспечении.

Для типичного класса следует применять SRP, поскольку он увеличивает возможность повторного использования класса.Ни один человек не хочет повторно использовать класс с двумя обязанностями, в то время как ему нужна только одна.Если он согласится использовать этот класс, он будет очень раздражать каждый раз, когда обновляется код ненужной ответственности.

Но для классов на границе вашего программного обеспечения SRP делаетне применять.Это место, где вы используете несколько типичных классов, так или иначе составляя их для обработки запросов от пользователей.Обычно нет необходимости повторно использовать классы на границе.Следовательно, нет необходимости применять SRP к ним.Другими словами, эти классы предназначены для нескольких обязанностей.

Ваш класс UserService является таким местом.Так что не волнуйтесь.

Вы можете узнать больше о SRP здесь .ИМО, это лучшая статья о принципе.

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