我第一次使用整数中的位标志设计了一个许可系统,我发现我一直搞错了。当我终于冷静下来,让我的头,我意识到有两个“方向”来接近它,我不是一贯的,造成许多混乱。
假设我有两个方法
create_contract() // sales administrators and higher
approve_contract(); // sales managers and higher我有两个许可权值
permission::SALES_ADMIN = 0x0001;
permission::SALES_MANAGER = 0x0002;权限检查功能是
bool is_allowed(method_permission, user_permission)
{
return (method_permission & user_permission) > 0
}方法1:只授予每个用户他的角色,并给予方法每个可以访问它的权限
create_contract.permission = permission::SALES_ADMIN | permission::SALES_MANAGER;
approve_contract.permission = permission::SALES_MANAGER;
John.permission = SALES_ADMIN;
Peter.permission = SALES_MANAGER;方法2:为用户提供他可以充当的所有角色,并赋予方法可以访问它的最小角色()
create_contract.permission = permission::SALES_ADMIN
approve_contract.permission = permission::SALES_MANAGER
John.permission = SALES_ADMIN;
Peter.permission = SALES_ADMIN | SALES_MANAGER;既然这是我的第一次,我想问一下,这两种方法之间是否有什么功能上的区别?哪一个有更多的好处和更普遍的使用?还是有更好的方法?
发布于 2013-06-01 14:10:53
第一种方法是正确的,因为它更好地塑造了现实。只需大声朗读以下几句:
第二个听起来不对。
此外,您还混合了一些术语(这可能是造成混淆的根源):
role -功能位置(SALES_ADMIN和SALES_MANAGER)permission -授权执行特定操作(create_contract.permission或CREATE_CONTRACT)您可以将权限建模为角色(即权限类型角色授予您的权限),但不能将角色建模为权限(至少听起来很奇怪)。
最后的注释--通常安全框架使用位标志来表示operations。原因很简单-- operations的数量总是有限的,但是可能的roles或permissions (具有不断增长的应用程序和新实现的功能)的数量是无法限制的。
https://stackoverflow.com/questions/16872686
复制相似问题