我第一次使用整数中的位标志设计一个权限系统,但我发现我一直弄错了。当我终于平静下来并转过头来时,我意识到有两个“方向”可以接近它,而且我自始至终都不一致,造成了很多混乱。
假设我有 2 种方法
create_contract() // sales administrators and higher
approve_contract(); // sales managers and higher
我有 2 个权限值
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;
由于这是我第一次,我想问一下这两种方法之间是否有任何功能差异?哪一个有更多的好处,更常用?还是有更好的方法?