ACl:如何在从数据库

时间:2016-05-26 05:44:02

标签: php laravel refactoring acl

我目前正在开发一个系统,我必须明智地获取记录。

假设我们有一个名为Clients的模块,我们可以管理客户信息并将客户端分配给用户。

假设我们有以下用户:

  1. 管理员拥有权限manage.all.clients(可以添加/编辑/删除/查看所有客户端)
  2. 具有权限manage.assigned.clients的管理员(可以查看/编辑分配的客户端)
  3. 具有权限view.all.clients的顾问(可以查看所有客户)
  4. 那么,我现在该怎么做?

    <?php 
    class ClientRepositoryinterface {
        public function getAllClients();
        public function getAssignedClients(User $user);
        public function getPaginatedClients();
        public function getPaginatedAssignedClients(User $user);
    }
    class ClientService {
        public function __constructor(ClientRepositoryInterface $clientRepository, LoggedInUser $user);
        public function getClients()
        {
            if($this->user->can('manage.all.clients','view.client.information'))
            {
                return $this->clientRepository->getAllClients();
            }
            if($this->user->can('manage.assigned.clients'))
            {
                return $this->clientRepository->getAssignedCliets($this->user);
            }
            return [];
        }
        public function getPaginatedClients()
        {
            if($this->user->can('manage.all.clients','view.client.information')){
                return $this->clientRepository->getPaginatedClients();
            }
            if($this->user->can('manage.assigned.clients')){
                return $this->clientRepository->getPaginatedAssignedClients($this->user);
            }
            return [];
        }
    }
    

    那么,这段代码有什么问题?

    1. 我一次又一次地检查从数据库中取出记录。
    2. 代码复制
    3. 如果我们向用户添加新权限,我们必须为所有方法添加另一个if条件,等等......
    4. 那么,我们可以采用其他解决方案来解决这个问题吗?

0 个答案:

没有答案