备忘,权限

这听起来像一种创新的做法,而不是在一个多对多,一对多的关系users_to_roles表,我作为一个十进制(int数据类型我相信定义了多个权限)。 这意味着为单个用户的所有权限都在一行。 它可能将没有意义,直到你读了其他问题和答复

我无法避开这一个我的大脑。 是否有人可以解释在转换过程? 这听起来权利,但我只是没有得到我怎样的角色转换为十进制之前,它在分贝去,以及如何获取转换回出来时的分贝。 我使用Java,但是如果你存根出来,这将是冷静的良好。

以下是在冷静机会的其他问题被删除原来的答案:

我个人有时使用的权限标记枚举。这种方式可以使用枚举的项目的ANDORNOT和异或位运算。


public enum Permission  
{  
    VIEWUSERS = 1, // 2^0 // 0000 0001  
    EDITUSERS = 2, // 2^1 // 0000 0010  
    VIEWPRODUCTS = 4, // 2^2 // 0000 0100  
    EDITPRODUCTS = 8, // 2^3 // 0000 1000  
    VIEWCLIENTS = 16, // 2^4 // 0001 0000  
    EDITCLIENTS = 32, // 2^5 // 0010 0000  
    DELETECLIENTS = 64, // 2^6 // 0100 0000  
}  
 

然后,您可以组合使用几种权限和位运算符。

例如,如果一个用户可以查看和编辑用户,行动的二进制结果是0000 0011的转换为十进制是3
然后,您可以存储到您的数据库的单个列的一个用户的权限(在我们的情况下,将3)。

在你的应用程序,你只需要一个按位操作(或)来验证用户是否具有特定权限或没有。

 

您使用按位运算。 在伪代码就会像是:

bool HasPermission(User user, Permission permission) {  
    return (user.Permission & permission) != 0;  
}  
void SetPermission(User user, Permission permission) {  
    user.Permission |= permission;  
}  
void ClearPermission(User user, Permission permission) {  
    user.Permission &= ~permission;  
}  
 

权限是枚举类型的定义在您的文章,但不论如何,是需要基于这样一个整数类型。 同样适用于User.Permission领域。

如果这些经营者(&,| =和&=)没有意义给你,然后阅读了位运算(按位AND和按位或)。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值