DTcms自带的权限系统虽然勉强够用,但是已经不能满足我们的需求,尤其是做网络公司;所以小编闲暇之余将DTCms权限改为采用二进制授权,最大支持64种不同权限操作,即2的64次方(9223372036854775808),如下图:
先说说我的做法的主要思路:
每一个操作的权限值,用一个二进制数来表示,每个权限值,只能是(1),(10),(100),(1000),也就是说,是2的N次方;因此,只要对指定的一位进行判断是0还是1,就可以验证用户的权限了。
这样我们只大大减少了跟数据库请求的次次,我们也可以很好的控制操作界面相关功能,如:二进制10000属于添加功能,那么我们只需要用账号所拥有的权限跟二级数10000执行与操作,如果大于0就说明有操作权限,如果等于0表示没有操作权限;如下图
目前二进制权限,以及整站权限功控制基本完成,权限已精确到按钮,没有权限的功能,按钮都不会显示,预计7月中旬,同redis一起更新到内部群,所有赞助者都可以第一时间更新到自己的系统中;
以下是正式应用的效果图:
(权限数据)
我们可以从中看到30,表示拥有显示、查看、添加、编辑权限 换算成二进制是“11110”,想比传统的是不是好了很多!
/// <summary> /// 验证是否拥有权限 /// </summary> /// <param name="r"></param> /// <param name="em"></param> /// <returns></returns> public static bool Verified(Int64 r, string em) { //验证是否拥有所有权限 if ((r & 1) > 0) { return true; } //其它 ActionItem item; if (dict.TryGetValue(em, out item)) { if ((r & item.uid) > 0) { return true; }; } return false; }