我正在制作一个小应用程序来处理项目相关信息,我遇到了ACL问题。我如何最好地处理以下情况?
用户:保留用户信息(用户名,密码,电子邮件,群组等)
群组:用户所属的群组。我有“管理员”,“经理”和“注册”
角色:已注册用户的角色。我有“领导者”,“成员”和“客人”。
成员资格:此表保留用户,角色和项目之间的关系。
项目:保留项目信息
项目:项目包含多个信息项。此表保留了这些项目。
用户:hasMany会员,belongsTo Groups。
群组:hasMany用户
角色:hasMany会员
会员资格:属于用户,项目,角色
项目:hasMany会员资格,项目
项目:belongsTo Projects
管理员(或管理员)基本上可以为注册用户分配角色。领导者和成员可以属于多个项目。属于特定项目的人可以编辑该项目的数据及其相关项目。领导者可以从注册用户池中为成员分配项目。
管理员:所有内容(用户,成员资格,项目,项目)的完整CRUD
经理:CRUD用户可以是“已注册”类型但不是“经理”或“管理员”。关于会员资格,项目和项目的完整CRUD。
已注册:可根据角色执行不同的操作:
领导者(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据(存储在“成员资格”表中的信息)。可以为他们的项目提供CRUD会员资格。可以为自己的项目CRUD项目。可以更新自己的项目。
成员(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据。可以为自己的项目CRUD项目。可以阅读自己项目的会员资格。可以更新自己的项目。
来宾(角色):可以更新自己的用户信息。可以阅读项目。
基于上述情况,您认为处理它的最佳方法是什么?我尝试使用ACL,但在某种程度上我失去了它。我尝试使用一些可用的ACL插件但没有成功。最大的挑战是处理经理和管理员创建的权限。请帮忙!
我还不是一个熟练的蛋糕面包师,所以请善待。非常感谢您的建议和建议。谢谢!
答案 0 :(得分:0)
是的,Cake的ACL可能很难。我不能给你一步一步的解释如何解决你的问题,但也许我可以帮助你了解大局。我建议你看看Cake's sample ACL app docs - 也许你只看了documentation on AclComponent?这部分文档可能有点令人困惑。
我认为你必须稍微修改你的数据库结构,使其成为“ACL方式”:
roles
上放置parent_id
列)而不是groups
表。 membership
表。 ACL具有aros_acos
表。ARO
。项目和项目的控制器(或这些控制器上的特定操作)是ACO
。 User
,Group
,UsersController
,GroupsController
)会“神奇地” “注意保持aros
表。ACO
和acos
表并不是那么简单。您必须决定如何管理它们(请参阅here和之后的部分)。 AppController::beforeFilter
方法中,您使用ACL组件的allow
和deny
方法授予或拒绝访问当前的Controller / action($this->name
,{ {1}})我相信你几乎就在那里,一旦你习惯了Cake的ACL,就不应该复杂。