如何使用CakePHP最好地处理这种复杂的ACL情况?

时间:2011-06-27 08:22:04

标签: cakephp cakephp-1.3 acl

我正在制作一个小应用程序来处理项目相关信息,我遇到了ACL问题。我如何最好地处理以下情况?

我的应用程序包含以下表格:

用户:保留用户信息(用户名,密码,电子邮件,群组等)

群组:用户所属的群组。我有“管理员”,“经理”和“注册”

角色:已注册用户的角色。我有“领导者”,“成员”和“客人”。

成员资格:此表保留用户,角色和项目之间的关系。

项目:保留项目信息

项目:项目包含多个信息项。此表保留了这些项目。

表格具有以下关系:

用户:hasMany会员,belongsTo Groups。

群组:hasMany用户

角色:hasMany会员

会员资格:属于用户,项目,角色

项目:hasMany会员资格,项目

项目:belongsTo Projects

管理员(或管理员)基本上可以为注册用户分配角色。领导者和成员可以属于多个项目。属于特定项目的人可以编辑该项目的数据及其相关项目。领导者可以从注册用户池中为成员分配项目。

以下是CRUD的情况:

管理员:所有内容(用户,成员资格,项目,项目)的完整CRUD

经理:CRUD用户可以是“已注册”类型但不是“经理”或“管理员”。关于会员资格,项目和项目的完整CRUD。

已注册:可根据角色执行不同的操作:

领导者(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据(存储在“成员资格”表中的信息)。可以为他们的项目提供CRUD会员资格。可以为自己的项目CRUD项目。可以更新自己的项目。

成员(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据。可以为自己的项目CRUD项目。可以阅读自己项目的会员资格。可以更新自己的项目。

来宾(角色):可以更新自己的用户信息。可以阅读项目。

基于上述情况,您认为处理它的最佳方法是什么?我尝试使用ACL,但在某种程度上我失去了它。我尝试使用一些可用的ACL插件但没有成功。最大的挑战是处理经理和管理员创建的权限。请帮忙!

我还不是一个熟练的蛋糕面包师,所以请善待。非常感谢您的建议和建议。谢谢!

1 个答案:

答案 0 :(得分:0)

是的,Cake的ACL可能很难。我不能给你一步一步的解释如何解决你的问题,但也许我可以帮助你了解大局。我建议你看看Cake's sample ACL app docs - 也许你只看了documentation on AclComponent?这部分文档可能有点令人困惑。

我认为你必须稍微修改你的数据库结构,使其成为“ACL方式”:

  1. 使用嵌套组(在表roles上放置parent_id列)而不是groups表。
  2. 您也不需要membership表。 ACL具有aros_acos表。
  3. 您将群组管理为ARO。项目和项目的控制器(或这些控制器上的特定操作)是ACO
  4. 如果您正确设置了ACL(检查this),那么用户管理控制器和模型(UserGroupUsersControllerGroupsController)会“神奇地” “注意保持aros表。
  5. 不幸的是,使用ACOacos表并不是那么简单。您必须决定如何管理它们(请参阅here和之后的部分)。
  6. AppController::beforeFilter方法中,您使用ACL组件的allowdeny方法授予或拒绝访问当前的Controller / action($this->name,{ {1}})
  7. 我相信你几乎就在那里,一旦你习惯了Cake的ACL,就不应该复杂。