@j0ker13

Как организовать структуру проекта для разделения прав пользователей?

Имеем только устанoвленный slim3 (+doctrine).
дописываем: в контроллеры инжектятся сервисы, в сервисы инжектятся репозитории.
правильно я себе представляю DI?
//... dependencies.php
$container[Services\PostService::class] = function ($c) {
    $postRepo = $c->get('em')->getRepository('Entities\Post');

    return new Services\PostService($postRepo);
};

$container[Controllers\PostController::class] = function ($c) {
    $postService = $c->get('Services\PostService');

    return new Controllers\PostController($postService);
};

//... routes.php
$app->get('/posts', 'Controllers\PostController:getAll');

//... PostController.php
namespace Controllers;

use Services\CourierService;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;

class PostController extends Controller
{
    protected $postService;

    public function __construct(PostService $postService)
    {
        $this->postService = $postService;
    }

    public function getAll(ServerRequestInterface $request, ResponseInterface $response)
    {
        try {
            $post = $this->postService->getAll();

            return $this->respondWithData($response, $$post, 200);
        } catch (\Exception $e) {
            return $this->respondWithData($response, [], 400, $e->getMessage());
        }
    }
}

//...PostService.php
namespace Services;

use Entities\Post;
use Controllers\Controller;
use Repositories\PostRepository;

class PostService extends Service
{
    protected $postRepo;

    public function __construct(PostRepository $postRepo)
    {
        $this->postRepo = $postRepo;
    }

    public function getAll()
    {
        return $this->postRepo->findAll();
    }
}

теперь надо разделить права пользователей. например админ видит все посты, писатель только свои.
и так далее будет: админ видит все рассказы, писатель только свои. городить проверку прав в сервисе и выдавать только нужные данные мне кажется глупо
я вижу идею в том чтобы у админа был свой сервис, у писателя свой:
WriterPostService extends PostService
AdminPostService extends WriterPostService

правильно ли это? если правильно как это реализовать с DI? где разделять сервисы: в контроллере или в dependencies.php?
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы