1.据了解,现在权限管理有好多模型,目前基于JAVA WEB的有没有一个通用的权限管理模型
2.权限管理中的权限状态那部分代码怎么去实现? 我看到过 有人用数字来表示CRUD操作,0-表示C ,1表示R等 这些怎么做

解决方案 »

  1.   

    这个可以参看一下尚学堂的做的那个OA项目..
    里面就有讲解权限管理..
    并且是ZL所说的实现方式...
      

  2.   

        访问控制,访问者类型、访问者标识、资源标识三者可以唯一确定一条访问控制记录,访问控制是对某个资源而言的。
        权限,对某个资源的某个操作是否允许。一个资源的操作有多种,比如CRUD。这里将所有的操作集中到一个int类型变量中,int类型变量可以用32位的二进制数表示,其中每一位代表一种操作,某一位置1表示该位代表的操作被允许,某一位置0表示该位代表的操作不被允许。
        继承,用户可以继承角色拥有的权限。继承是访问控制中的一个属性,所以继承也是针对某个资源而言的。在用户继承角色的权限时,必须同时继承所有角色的所有操作的权限,不能只继承角色一的权限,而不继承角色二的权限,也不能只继承读取权限,而不继承修改权限。当用户不想继承角色的权限时,就需要直接为用户授权。在本系统中,只有用户拥有继承特性,而角色没有。当用户继承角色的权限时,用0xFFFFFFFF(-1)表示,否则用0x00000000表示。
        授权,为访问者授予某个资源的操作权限。我们可以单独为某一种操作授权,授权方式如下:setOperationState(int operation, boolean allow)。将某个资源的删除权限授予用户时,我们应该先定义一个 int temp = 1,内存中的表示如下:
    0000 0000 0000 0000 0000 0000 0000 0001 
    左移3位(删除操作在第三位)
    0000 0000 0000 0000 0000 0000 0000 1000
    若允许授权,则与原来的授权状态相或,若不允许授权,则取反再与原来的授权状态相与。
        认证,查看访问者是否具有访问某个资源的某个操作的权限。本系统的认证包括两个部分,第一,不同的用户登录系统会根据拥有的权限读取不同的模块,看到不同的界面,第二,用户不允许进行超越权限的操作(目前只是让没有权限的操作不在页面中显示)。
      

  3.   

    建议用RBAC权限模型NIST (The National Institute of Standards and Technology,美国国家标准与技术研究院)标准RBAC模型由4个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC)、角色分级模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)[1]。RBAC0模型如图1所示。  
     RBAC 0 模型 
    RBAC0 定义了能构成一个RBAC控制系统的最小的元素集合
    在RBAC 之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权 permissions(PRMS)五个基本数据元素,权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限。会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制的差别在于增加一层间接性带来了灵活性,RBAC1、RBAC2、 RBAC3都是先后在RBAC0上的扩展。 RBAC1 引入角色间的继承关系
    角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。RBAC2 模型中添加了责任分离关系
    RBAC2 的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。
    l RBAC3 包含了RBAC1和RBAC2
    既提供了角色间的继承关系,又提供了责任分离关系。建立角色定义表。定出当前系统中角色。
    因为有继承的问题,所以角色体现出的是一个树形结构。 思想 :
    权限系统的核心由以下三部分构成: 1. 创造权限, 2. 分配权限, 3. 使用权限,然后,系统各部分的主要参与者对照如下: 1. 创造权限 - Creator 创造, 2. 分配权限 - Administrator 分配, 3. 使用权限 - User :
    1. Creator 创造 Privilege , Creator 在设计和实现系统时会划分,一个子系统或称为模块,应该有哪些权限。这里完成的是 Privilege 与 Resource 的对象声明,并没有真正将 Privilege 与具体 Resource 实例联系在一起,形成 Operator 。
    2. Administrator 指定 Privilege 与 Resource Instance 的关联 。在这一步, 权限真正与资源实例联系到了一起, 产生了 Operator ( Privilege Instance )。 Administrator 利用 Operator 这个基本元素,来创造他理想中的权限模型。如,创建角色,创建用户组,给用户组分配用户,将用户组与角色关联等等 ... 这些操作都是由 Administrator 来完成的。
    3. User 使用 Administrator 分配给的权限去使用各个子系统。 Administrator 是用户,在他的心目中有一个比较适合他管理和维护的权限模型。于是,程序员只要回答一个问题,就是什么权限可以访问什么资源,也就是前面说的 Operator 。程序员提供 Operator 就意味着给系统穿上了盔甲。 Administrator 就可以按照他的意愿来建立他所希望的权限框架 可以自行增加,删除,管理 Resource 和 Privilege 之间关系。可以自行设定用户 User 和角色 Role 的对应关系。 ( 如果将 Creator 看作是 Basic 的发明者, Administrator 就是 Basic 的使用者,他可以做一些脚本式的编程 ) Operator 是这个系统中最关键的部分,它是一个纽带,一个系在 Programmer , Administrator , User 之间的纽带。详细内容在http://info.codepub.com/2008/05/info-19368.html
      

  4.   

    比如0000 0000 0000 0000 0000 0000 0000 0111 表示允许新建、读取、修改,不允许删除。内存中的0111是二进制的,转换成十进制就是7,也就是将授权改成7,CRU操作就被允许了,D操作就不被允许。这是直接修改所有操作的授权,我上面讲的是如果修改某一位的授权。
    比如原来一条访问控制实例的授权如下:0000 0000 0000 0000 0000 0000 0000 0111
    现在要修改成允许删除,即更改授权如下:0000 0000 0000 0000 0000 0000 0000 1111
    我们需要做的就是将0000 0000 0000 0000 0000 0000 0000 0111或上(|)0000 0000 0000 0000 0000 0000 0000 1000
    二进制的1000就是8,你可以直接或上8,可以将一个1左移3位,可以得到8。
    1用二进制表示为:0000 0000 0000 0000 0000 0000 0000 0001
    左移3位:0000 0000 0000 0000 0000 0000 0000 1000,也就是8.
      

  5.   

    int类型在内存中占32位,每一位可以表示成一种操作,假设CRUD分别用第1,2,3,4位表示,当前位 置1表示该操作允许,置0表示该操作不允许。
    比如0000 0000 0000 0000 0000 0000 0000 0111 表示允许新建、读取、修改,不允许删除。内存中的0111是二进制的,转换成十进制就是7,也就是将授权改成7,CRU操作就被允许了,D操作就不被允许。这是直接修改所有操作的授权,我上面讲的是如果修改某一位的授权。
    比如原来一条访问控制实例的授权如下:0000 0000 0000 0000 0000 0000 0000 0111
    现在要修改成允许删除,即更改授权如下:0000 0000 0000 0000 0000 0000 0000 1111
    我们需要做的就是将0000 0000 0000 0000 0000 0000 0000 0111或上(|)0000 0000 0000 0000 0000 0000 0000 1000
    二进制的1000就是8,你可以直接或上8,可以将一个1左移3位,可以得到8。
    1用二进制表示为:0000 0000 0000 0000 0000 0000 0000 0001
    左移3位:0000 0000 0000 0000 0000 0000 0000 1000,也就是8.
      

  6.   

    6楼说的是基于角色的访问控制,在这种访问控制中:角色标识和资源标识可以唯一确定一条访问控制实例
    而我说的基于用户和角色的访问控制,访问者不仅仅可以是角色,也可以是用户,也就是说你可以为角色授权,用户通过继承角色的权限而获得相应的权限,
    你也可以单独为用户授权,使用户不再依赖他拥有角色的权限。由于用户和角色是两个不同的对象,所以在这种访问控制中:访问者类型、访问者标识和资源标识可以唯一确定一条访问控制实例。
    当然你也可以定义一个Visitor标识接口,让User和Role都现实他,那么在访问控制列表中:访问者标识和资源标识可以唯一确定一条访问控制实例
      

  7.   

    继承也用int型来表示,它同样是32位 0000 0000 0000 0000 0000 0000 0000 0000
    全0表示不继承,授权与上继承,角色的授权就不被继承了,同理,全1表示继承,二进制全1用十进制表示就是-1。
    其实还有好多细节问题,比如用户继承多个角色的权限,各个角色的授权又存在冲突,怎么解决?详细的内容参考  尚学堂的OA项目,北风网、浪曦网都有下载!