这更像是一个建议的问题,而不是一个确切的答案......
在我的CakePHP应用程序中,我将拥有后端用户和前端成员。它们具有完全不同的角色和权限(用户是应用程序管理员,成员是在网站上注册而无需访问应用程序后端的访问者)。我应该为这两种授权类型使用不同的表,还是应该使用角色参数管理它们,并根据它将表绑定到它们的配置文件,为什么一种解决方案比另一种更好?
答案 0 :(得分:3)
使用相同的表格和role
或type
字段。您只需登录一次即可轻松管理帐户。
使用ACL或自定义权限系统允许它们使用不同的控制器/操作。
答案 1 :(得分:1)
对于权限,我有3种方法可以做到:
严格角色的方式: 您的应用程序的每个角色都可以访问带有前缀的函数,但不能访问任何其他前缀。
例如:管理员可以访问 admin_edit ,但不能访问 customer_edit
在users
表中添加角色varchar或enum,在Config/core.php
中添加路由前缀,并允许AppController::beforeFilter
中的访问权限:允许每个角色访问其前缀仅
分层方式: 您的应用程序的角色以分层方式排序,角色可以访问其前缀和他下面的每个前缀。
例如:管理员可以访问 admin_edit 和 customer_edit ,但 客户无法访问 admin_edit
您在users
表格中添加了角色varchar或枚举,Config/core.php
中的路由前缀,并通过检查每个AppController::beforeFilter
允许访问$this->request->params['prefix']
角色可以访问它。
自定义方式: 您需要管理员访问某些功能,但不是全部。您需要另一个角色才能访问管理员可以访问的某些功能,而某些功能管理员则无法访问。
例如:管理员可以访问 admin_edit 和 customer_edit ,但不能 customer_create 或 user_stat 。 客户可以访问 customer_edit , customer_create 和 user_stat ,但不是 admin_edit 或 user_edit
使用ACL。这不是管理应用程序权限的最简单方法,但如果您需要特定权限,则这是最好的方法。所以请记住:只在你确实需要时使用ACL。
答案 2 :(得分:0)
我同意cornelb:只有一张桌子。以下是一些其他原因:
如果添加外键约束,使它们引用应用程序管理器表和访问者表可能会很麻烦。总是当你想指向一个用户时,你需要2个字段,而不是1个(指向管理器表的字段,以及访问者表中的一个字段 - 其中一个必须为空)。如果你需要连续2个用户ID字段,使用外键怎么办?然后你突然需要4个字段。 Simper,所有键都指向一个表(用户类型由上述字段决定)。
有时您可能希望用户ID成为主键的一部分 - 但如果您有两个不同的用户ID字段,每个表中有一个,那就更复杂了。因为数据库无法保证每个用户ID都是唯一的 - 您必须在应用程序级别自己完成。