简单权限验证的方法
权限验证一直是各类大大小小的系统中核心的问题。如果一个系统权限验证都只有是否两类情况,不存在多值的情况,可以考虑用一个整数保存权限。
1。定义好各个功能在权限串中的位置,如 10001 的意义是
新增文章权限 1
修改文章权限 0
删除文章权限 0
搜索文章权限 0
发送短信权限 1
这里有一个限制,只能加,不能减少功能点,也就是在做设计时,必须仔细分析系统对应的功能点,并尽量细化,达到最小颗粒的状态。
2。以论坛为例,既有用户组权限也有版权限(栏目权限),也就是操作权限和数据权限的关系,一个用户真正的权限应该是这两组权限的交集,当然也有可能是权限优先级的问题,当各组权限出现冲突的时候,以某一组权限为标准。
得出权限交集的做法:
public static void Main()
{
int p1 = 1010;
int p2 = 0110;
//p3就是最终要保存下来的某个用户组在某个版的权限串
int p3 = MyClass.method1( p1,p2);
}
public static int method1(int p1, int p2)
{
int n1 = Convert.ToInt32(p1.ToString(), 2);
int n2 = Convert.ToInt32(p2.ToString(), 2);
int result = n1 & n2;
return Int32.Parse(Convert.ToString(result, 2));
}
3。保存权限串到Cache,系统运行时,从Cache中读取权限串进行权限验证。
如权限串10010,要判断是否有修改文章的权限,要判断权限串从左起第2位的值,
int p1 = 10010;
//1 有操作权限 0 无操作权限
int r1 = int.parse( ((p1>>3)%2).ToString());
这样的做法,应该能使权限验证的代价减到最小,但不适用于有多值的权限,
特别谢谢csdn的 fancyf(凡瑞)