我正在制作一个小型应用程序来处理项目相关信息,但我在 ACL 方面遇到了问题。遇到以下情况我该如何最好地处理?
我的应用程序具有下表:
用户:保留用户信息(用户名、通行证、电子邮件、群组等)
组:用户所属的组。我有“管理员”、“经理”和“已注册”
角色:注册用户的角色。我有“领导”、“成员”和“嘉宾”。
memberships:该表保存用户、角色和项目之间的关系。
项目:保留项目信息
项目:项目有多个信息项目。该表保留这些项目。
这些表具有以下关系:
用户:拥有许多成员(member)资格,属于组。
组:有许多用户
角色:拥有许多成员(member)资格
成员资格:属于用户、项目、角色
项目:拥有许多成员(member)资格、项目
项目:属于项目
基本上,经理(或管理员)可以将角色分配给注册用户。领导者和成员可以属于多个项目。属于特定项目的人员可以编辑该项目的数据及其关联项目。领导者可以从注册用户池中将成员分配到项目。
以下是 CRUD 方面的情况:
管理员:对所有内容(用户、成员资格、项目、项目)进行完整的 CRUD
经理:可以对“注册”类型的用户进行 CRUD,但不能对“经理”或“管理员”类型的用户进行 CRUD。关于成员(member)资格、项目和元素的完整 CRUD。
注册:可以根据角色做不同的事情:
领导者(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据(存储在“memberships”表中的信息)。可以为他们的项目授予 CRUD 成员(member)资格。可以为自己的项目增删改查项目。可以更新自己的项目。
成员(角色):可以更新自己的用户信息并读取属于其项目的其他用户数据。可以为自己的项目增删改查项目。可以阅读自己项目的成员(member)资格。可以更新自己的项目。
guest (角色):可以更新自己的用户信息。可以阅读项目。
基于上述情况,您认为最好的处理方法是什么?我尝试过使用 ACL,但在途中的某个地方我丢失了它。我尝试使用一些可用的 ACL 插件,但没有成功。最大的挑战是处理管理者和管理员的权限创建。请帮忙!
我还不是一个熟练的蛋糕烘焙师,所以请友善。我们将非常感谢您的建议和推荐。谢谢!
最佳答案
是的,Cake 的 ACL 可能很困难。我无法为您提供有关如何解决问题的逐步解释,但也许我可以帮助您了解全局。建议你看看Cake's sample ACL app docs -- 也许你只读过documentation on AclComponent ?文档的这一部分可能有点令人困惑。
我认为你必须稍微修改你的数据库结构,使其成为“ACL 方式”:
- 使用嵌套组(在表
groups
上放置parent_id
列),而不是使用roles
表。 - 您也不需要
membership
表。 ACL 具有用于此目的的aros_acos
表。 - 您可以将群组作为
ARO
进行管理。项目和项目的 Controller (或这些 Controller 上的特定操作)是ACO
。 - 如果正确设置 ACL(检查 this ),用户管理 Controller 和模型(
User
、Group
、UsersController
、GroupsController
) “神奇地”负责维护aros
表。 - 不幸的是,
ACO
和acos
表并不是那么简单。您必须决定如何管理这些(请参阅 here 以及后面的部分)。 - 在您的
AppController::beforeFilter
方法中,您可以使用 ACL 组件的allow
和deny
方法来授予或拒绝对当前 Controller /操作 ($this->name
,$this->action
)
我相信您已经快成功了,一旦您习惯了 Cake 的 ACL,一切就不会那么复杂了。
关于cakephp - 如何使用 CakePHP 最好地处理这种复杂的 ACL 情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490253/