- 论坛徽章:
- 0
|
原帖由 ultralqxq 于 2006-4-8 08:37 发表
不要用乘法来做(乘法算是高级运算了),应该用加法或位运算!如
游览1\录入2\修改4\删除8等等。。反正是00000001 00000010 00000100 00001000这样的形式。。。
这样不需要任何比较或运算,所有权限一目了然!! ...
这个是很常用的做法,适用于模块数量较少的权限系统,大量用户的情况。
具体的是:给每个用户一个存储标志块(变量), 大小固定(假设为nbyte),这样我们就有8n位可以设置0,1来表示有无权限(对于某类需要多个权限类型的模块,例如某模块需要读,写,操作3个权限,我们给[权限数/2]+1位来表示就可以了)。设置和读取的时候都用位操作。
例如(0x101 ^ 0x001) 可以得到是否最后1位是1。(0x101 | 0x001)得到设置最后一位是1的结果。
| |
用户变量 最后1位是1代表的权限
但是这个做法不适用于上面有兄弟提出的100种(甚至更多)模块权限,但是用户本身的权限很稀疏(就是指用户只有少量的几个模块的权限)的情况(我觉得这个是有可能的,而且适用的情况比较多)。这种情况比较常用的是每个用户的权限变量用类似的结构:
{
{权限模块ID, 具体权限}
{权限模块ID, 具体权限}
}
无权限就是找不到相应的ID,具体模块权限也可以查找得到。
这2种是最基本的权限数据上的设计,具体的设计还是依赖于实际的需求/应用。
脱离了需求的设计都是空想。 |
|