Laravel Repository / Service Pattern: Как обращаться с Аутом и Гейтсом - PullRequest
1 голос
/ 21 марта 2019

Я начинаю использовать шаблон репозитория и сервиса для моего проекта laravel.

Просто вкратце, я использую хранилище в качестве картографа данных и сервиса, чтобы помочь контролерам выполнять свою основную работу - получать запросы и отправлять ответы, и, следовательно, быть более тонкими.

Следующий пример кода должен дать вам некоторое представление о приведенном выше объяснении:

// App\Repositories\Eloquent\UsersRepository
class UsersRepository implements UsersRepoInterface {
    protected $model;

    public function __construct (Model $model) {
        $this->model = $model;
    }
    public function all() : Collection {
        //
    }
    public function find($id) : Model {
        //
    }
    // and all other methods ...
}

// App\Services\UserService
class UserService {
    protected $repo;

    public function __construct (UsersRepoInterface $user_repo) {
        $this->repo = $user;
    }
    /**
     * @param array $data
     * @return User
     * @throws Exception
     */
    public function create(array $data) : User {
        // All business logics to create a user data
        return $user;
    }
    // and all other methods ...
}

// App\Http\Controllers\UserController
class UserController extends Controller {
    private $user;

    public function __construct (UserService $user) {
        $this->user = $user;
    }

    public function create (Request $request) : Response {
        $user = $this->user->create($request->all());

        return response(['user' => $user]);
    }
}

Кроме того, мой проект является внутренним API-приложением, поэтому для выполнения большинства запросов необходима аутентификация. Я использую OAuth2.0 из Laravel Passport.

Вопрос

Прежде чем я переключился на репозиторий / службу или шаблон, который вы назвали, я использовал Gates и Policies до того, как запросы были переданы в методы контроллера. И очевидно, что User Auth передается каждому методу политики, который я не считаю правильным как Auth (который из Passport), я полагаю, что вместо этого использую Модель пользователя напрямую, что является нарушением для шаблона хранилища, не так ли?

Поэтому мне очень нужен совет, как мне справиться с решением такой проблемы?

Любые предложения и помощь, безусловно, приветствуются!

Заранее спасибо!

...