zoukankan      html  css  js  c++  java
  • 巧妙运用二进制验证权限

    在权限分配中有多个权限级别,不同用户分别有多个不同的权限。

    论坛的权限:

    查看、发帖、投票、搜索

    用户的权限:

    用户A:查看、发帖

    用户B:查看

    用户C:查看、发帖、投票、搜索

    分析:

    有四种不同的权限级别,总共2^4种权限分配方式。

    像这样权限等级划分和不同级别用户的权限分配采用二进制方式权限分配验证方式是最好的选择。即每一个操作权限都用一个二进制数表示(1、10、100、1000)。总共的权限种类有2^n种,n即代表权限类别。在C#中long类型有64位,所以总共有64类权限,2^64种权限分配方式。权限的分配、删除、查看都采用二进制运算实现。

     

    long userrolevalue;//用户的操作权限

    long oprolevalue;//一个操作的权限

    1.权限的分配(或运算)

    userrolevalue = userrolevalue | oprolevalue

     

    (00001110)2=(00000010)2|(00000100)2|(00001000)2

    2、权限的删除(求补、与运算)
    userrolevalue = userrolevalue & (~oprolevalue)

     

    3、权限的验证(与运算)

    (userrolevalue & oprolevalue) == oprolevalue

    (00000101)2 &( 00000011)2 ==(00000001)2

    如果通过验证则具有相应类别的权限。

    此验证方法,还可以用在菜单权限的验证上来。根据要划分的权限等级数量可以选择相应的数据类型,比如int类型默认的是32位的,short是16位的。

  • 相关阅读:
    c# 方法重载
    c# propertyGrid下拉选项
    c# 枚举类型
    c# socket编程
    读书笔记之ado.net entity framework
    c# delegate的invoke和bejinInvoke的区别
    C# 读书笔记之类与结构体
    c#笔记之启动新线程
    c# listview的使用
    visual studio2013 改变匹配括号的颜色
  • 原文地址:https://www.cnblogs.com/jasonlny/p/3526671.html
Copyright © 2011-2022 走看看