【问题标题】:Cake ACLs with Groups and Users added to Projects将组和用户添加到项目中的 Cake ACL
【发布时间】:2013-03-29 13:56:47
【问题描述】:

我目前正在开发一个平台,计划在未来协调与客户的沟通。用户可以添加到项目中并具有一定的权限。因此,用户被分配到不同的用户角色(管理员/经理/成员/查看者)。管理员可以查看所有项目并允许将其他用户添加到项目中。如果将用户(例如角色:成员)添加到项目中,他将拥有一定的权限(取决于角色),如果没有,则根本不允许他访问项目。

我正在使用 Cake 的 ACL 组件,当我忽略用户是否被添加到项目时,一切都运行良好。我能想到的唯一解决方案不是在组级别授予权限,而是在管理员将用户添加到项目时授予用户级别的权限。

有没有更简单的方法来解决这个问题?否则我担心代码会变得完全混乱。

【问题讨论】:

    标签: acl cakephp-2.1


    【解决方案1】:

    还有另一种方法(我真的不知道是否更容易,取决于您的观点)。 ACL 组件仅帮助您创建角色,但您需要角色和项目访问权限管理,对吗?

    在这种情况下我该怎么做:

    1. 在您的数据库中创建一个 Project_Permission 表(给它一个更好的名称,我缺乏想象力)。根据您的项目,创建关联:一个用户可以与许多项目相关,一个项目可以有许多用户访问它。如果您遵循蛋糕约定(并且您的表被命名为用户和项目)并且它不会干扰您已经拥有的内容,那么该表应该是

      PROJECTS_USERS
      id
      project_id
      user_id
      created and modified  //if you want to
      
    2. 在管理员(或其他类型的用户,这取决于您)的位置创建适当的操作 可以将用户添加到项目并将该多对多关联保存在 之前创建的表。

    3. 由于项目的授权不是来自ACL组件,所以你必须自己创建一个“授权”函数。我建议将它放在 AppController 的 beforeFilter() 函数中(如果您没有 AppController,则必须在希望它工作的每个控制器中执行此操作)。在此函数中,检查登录的用户是否在现有表中并与项目有关联。比如:

      function beforeFilter() {
          //let's assume you have the project id somewhere, in a global variable like $this->_projectID
          $user = $this->Session->read('Auth.User.id');
          $project = $this->Project->find('first', array('conditions'=>array('id'=>$this->_projectID, 'User.id'=>$user)
          if (count($project) > 0) {
              //the user has permission to see the project
          } else {
              //he doesn't
          }
      }
      

    很难给出一个实际的代码,因为我不确定你的模型关联,也不知道你想要代码在哪里,或者你是否有到处可用的变量,但我希望你能明白。之后就是你想如何处理访问限制的问题了(通常会涉及到 flash 消息和重定向)。

    我希望这足够清楚:S

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多