zoukankan      html  css  js  c++  java
  • 权限管理

    一、权限控制总论

    ----------------------------------------------------------------------------------------------

    权限控制可以归结为一句话:哪些对哪些资源做哪些操作
     
    哪些人一般有两种视角,一种是基于用户和系统,相关的关键字有:用户、角色、用户组等
    第二种是基于组织结构或者HR的视角,相关的关键字有:员工、岗位、职务、部门等
    熊猫采用第二种视角,在这种视角下,员工、岗位、职务、部门统一称之为“授权主体(AuthorizationPrincipal)”,授权主体可以拥有权限,最终都体现在员工上,目前可以对岗位和部门进行授权,组织结构是树状关系,下级组织结构的权限自动继承上级组织结构的权限
     
    哪些资源有广义的资源和狭义的资源,广义的资源指的是企业管理一切要管理的事物,讨论没有意义。狭义的资源指的是产品中进行权限控制的界面和业务数据等,在Panda中资源就是ResourceNode对应的领域对象。更多ResourceNode的资料请参见Netsharp总体介绍1.3.3节
     
    哪些操作也有广义和狭义的概念,在Panda中操作主要分成三种,功能权限、数据权限、字段权限。功能权限主要控制一个按钮能不能操作,一个页面能不能打开;数据权限可以理解为行级别的权限,即多条记录中你可以看哪部分,常见的数据权限是基于组织机构的;字段权限可以理解为数据库列权限,即一些敏感的字段你能不能看,比如客户手机号和销售金额。
    字段权限是特殊的功能权限,甚至某些数据权限也可以认为是特殊的功能权限,功能权限请查看如下场景:
    这个表分成内容、列头、行头三个部分,内容称之为"操作(Operation)"列头称之为"资源(ResourceNode)",行头称之为"操作类型(OperationType)",
    通过考察上表,可以得出如下结论:操作(Operation) = 资源(ResourceNode)+ 操作类型(OperationType)
     
    说明:权限控制还有一些高级的概念,比如权限互斥、分级授权、权限代理、多组织权限、项目管理等,panda暂时不做这些功能。
     
    二、权限管理静态结构
    ----------------------------------------------------------------------------------------------
     
    下面是权限管理的静态结构总图:
    panda的实体类参考如下目录:
    /netsharp/src/org/netsharp/orgnization/entity
     
    三、权限控制场景
    ----------------------------------------------------------------------------------------------
    一)登录/注销
     
    权限的控制起始于登录,结束于注销或者Session失效
    权限的配置一般放在Session中,提升效率
    登录时添加配置数据到Session中,注销或者Session失效时候释放配置数据,配置数据使用类型:
    org.netsharp.orgnization.controller.authorization.UserPermission
    public class UserPermission {
     
     private Employee employee;                               // 员工
     private List<Operation> operations;                    // 当前员工的操作权限
     private Map<String, List<String>> fieldGeteways; // 当前员工的字段权限
     private boolean isPermission;                              // 是否已经加载了权限数据
    }
     
    Session管理器相关接口
    public class UserPermissionManager 
     
     // 从Session中得到用户权限设置
     public static UserPermission getUserPermission();
     
     // 释放用户权限设置
     // session注销或者注销时执行
     public static void removeSession();
     
     // 根据员工添加Session
     public static void addSession(Employee employee);
    }
     
    Session注销时在JSP中,通过注册自定义的Listener 实现:
    com.ykx.web.servlet.PandaSessionListener ,在该类中实现sessionDestroyed方法即可,
     
        public void sessionDestroyed(HttpSessionEvent arg0) {
         UserPermissionManager.removeSession();
        }
     
    重要:从数据库中查询用户的功能权限
    参考代码:org.netsharp.orgnization.controller.authorization.UserPermissionManager
     
    二)导航级权限/功能按钮权限
    功能权限控制的思路如下:
    1.开发人员在数据库中新增一个操作(Operation)(例如:销售订单新增权限,其中订单是ResourceNode,新增时OperationType)
       同时在销售订单界面的新增按钮上(ToolbarItem)设置对应这个操作
    2.正式环境中,管理员把订单的新增操作权限授权给某个岗位,此时会新增一个PrincipalOperation对象
    3.当一个用户登录时,系统会查询这个用户的所有岗位的所有操作权限
    4.当用户打开订单界面,加载工具栏时,判断当前用户是否有销售订单新增的Operation,确定此按钮是否渲染
     
    上文已经得出结论:操作(Operation) = 资源(ResourceNode)+ 操作类型(OperationType)
     
    权限控制接口
    判断当前用户是否有一个操作权限时的接口如下:
    权限控制接口调用
        调用的场景一般都与插件有关,主要的场景有:
        下面是工具栏(ToolbarItem)加载的权限控制
     目前熊猫下有四种插件项目与此类似,将来还会有更多
    三)页面级授权
    页面级授权指的是,用户打开一个页面(一般一个URL唯一标识一个页面),没有权限则跳转到授权失败页面。页面授权有如下几种场景:
    1.熊猫工作区页面
    2.熊猫自定义的页面(HtmlPage子类)
    3.普通JSP页面
     
    页面的权限的控制一般在Serverlet的Listener拦截实现,在Spring.MVC中也可以拦截,在Listener中如果是非授权页面需要和授权页面区别出来,而且要有一套配置,熊猫不采用这种方式
     
    从另一个角度说,页面权限控制的方式和工具栏的控制相似,只是控制的场景不同。
    四) 字段权限
     
    字段权限的设置对客户来说和功能权限是一样的,字段权限是功能权限的一种延伸,请看如下关系图:
     
    字段权限的设置如下图:
    (暂无)
     
    场景描述:
    1.客户打开列表或者表单
    2.FormPart或者ListPart加载元数据
    3.找到当前用户的权限数据,根据实体名和字段确定用户可以查看改字段,如果不能查看,那么该字段不渲染
    权限字段的控制:
     
    列表渲染或者表单渲染的代码(以列表为例):
    五) 数据权限
    (暂无)
    六)工作流审批权限
    暂无

    作者    :秋时

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/Netsharp/p/4306215.html
Copyright © 2011-2022 走看看