精华内容
下载资源
问答
  • 数据库的权限设计与实现 数据库的权限设计与实现
  • 系统权限设计与实现入门

    千次阅读 2017-07-01 17:58:19
    本来是想结合一下网上的文章经验来整理一下公司内部交流所分享的一些有关于权限设计与实现的解析与思路。但是网上粗略翻了下资料,发现权限设计与管理的有关知识甚多,是个远比我想象要庞大的知识体系。不同体量的...

    本文将从权限设计与实现是什么、为什么、怎么做三个方面,以初学者的角度分享一下权限设计与管理的相关心得,不足之处请指正。

    本来是想结合一下网上的文章经验来整理一下公司内部交流所分享的一些有关于权限设计与实现的解析与思路。但是网上粗略翻了下资料,发现权限设计与管理的有关知识甚多,是个远比我想象要庞大的知识体系。不同体量的系统,有不同的权限设计,那么如何对当下需求与未来规划做一番取舍,着实考验权限架构者的水平。

    是什么

    权限的设计用一句简单的话来说就是[1]

         能否       哪些      

    WHO    CAN    DO   THE    THINGS

     

    成分

    含义

    说明

    用户/角色/组

    自然人/权限集合体/相同权限集合体

    能否

    许可标记

    用0/1或T/F设置许可

    增加/删除/修改/查询/统计/打印/过帐

    权限对象

    哪些

    通用/本人/本组别/高组别/其他

    权限范围

    数据

    (如客户、供应商、订单、报表等)

     

    权限的实现对实际系统而言,应当是:

    正确的操作者在正确的目录下用正确的功能对正确的对象进行了正确的操作。

    即应当满足5RIGHT。

    为什么

    系统所支持的业务处理以及有待处理的大量数据是企业的重要资源,应予以特别保护。为了防止非法用户使用系统及合法用户对系统的非法访问,需要对应用系统的采取保护措施,合理的用户及权限管理是一种有效的手段,可以很大程度降低应用系统的安全风险[2]

    怎么做

    基于以上,就必须实现合理的映射:

    从设计到实现

    实现时:

    1.     简单的话,用户+权限目录:


    2.     稍复杂一点:用户+角色+权限目录:


    3.     进阶级:用户+角色+用户组+数据权限+权限目录[3];(细粒度控制)


    4.高级:用户+角色+用户组+数据权限+细分API+安全审核+权限目录。

    (细粒度控制+安全控制)

    5.笔者还见到一种组合是:组织结构层级权限倒继承设计,部门经理拥有部门人员的所有权限,依职位层级倒继承,就是职员有的,职员的上司全有。

    无论那种组合,都离不开用户、模块、权限目录,设计数据表结构就在此处下功夫了。也是其他相关表的主表,考滤其以后容易扩展,尽量简单设计[4]

     


     

    [1] http://www.cnblogs.com/JamesLi2015/p/4746765.html解析大型.NET ERP系统 权限模块设计与实现

    [2] 焦英, 高冬梅, 安剑. ERP系统用户权限管理的设计与实现[C]// 全国电力企业信息化大会. 2011.

    [3] http://wxg6203.iteye.com/blog/682830人员、用户组、角色、权限之间的关系的个人理解

    [4] http://blog.sina.com.cn/s/blog_e003e0ef0101fxvj.html[转载]5、ERP设计之用户权限


    展开全文
  • ASP.NET系统用户权限设计与实现 针对一切用户权限设置的操作与制作步骤
  • 如何实现通用的B_S系统的用户权限设计与实现,以ASPNET为实例 PDF格式
  • ASP.NET系统用户权限设计与实现.通用型比较好。易于移植.
  • 毕业设计ASP_NET系统用户权限设计与实现,强烈推荐
  • 设计与实现 关键字 工作流开发框架权限设计、用户组、岗位、集团模式应用. java工作流程引擎, .net 工作流引擎,工作流开发框架 相关的表结构 -- 相关组织-表结构。 SELECT No,Name,ParentNo FROM port...

    Java工作流引擎-集团模式下的权限

    设计与实现

     

      1. 关键字

    工作流开发框架权限设计、用户组、岗位、集团模式应用. java工作流程引擎, .net 工作流引擎,工作流开发框架

      1. 相关的表结构

    -- 相关组织-表结构。

    SELECT No,Name,ParentNo FROM port_dept;   -- 部门。

    SELECT No,Name,Adminer,AdminerName FROM port_org; -- 组织。

     

    -- 岗位表.

    SELECT No,Name,FK_StationType, OrgNo FROM port_Station; -- 岗位。

    SELECT No,Name,OrgNo FROM port_stationtype; -- 岗位类型。

    SELECT FK_Dept,FK_Emp,FK_Station FROM port_deptempstation;  -- 部门人员岗位。

     

    -- 用户组表.

    SELECT No,Name,FK_Team FROM port_team; -- 用户组。

    SELECT No,Name FROM port_teamType; -- 用户组类型。

    SELECT FK_Teamp,FK_Emp FROM port_teamEmp;  -- 用户组人员。

     

     

    --公文字号相关的设计.

    SELECT No,Name,FK_Team FROM Doc_DocType; -- 公文类型 。FK_Team 是他的分组编号

    SELECT No,Name,FK_DocType,FK_Team FROM Doc_Word; -- 公文字号。

     

    -- 公文表。 必须有的四个字段

    SELECT DocWordKey, DocWordName,DocWordYear,DocWordLSH, DowWord FROM Frm_JiTuanXingZhengShouWenJian

      1. 集团模式下的权限描述如下
    1. 整个集团的部门是一棵大树,只有一个根节点,根节点的parentNo的编号为0。部门的表的主要字段是No,Name,ParentNo,
    2. 组织的概念就是独立岗责体系的子公司或者单位,组织里有一个或则多个管理员。
    3. 集团中admin是超级管理员,admin可以把一个部门节点设置为一个组织。
    4. 一个二级管理员可以管理多个组织,admin也可以有多个组织的管理权限。
    5. 二级管理员或者admin登录后,如果有多个组织系统会让其选择要登录那个组织进行管理?
    6. 选择一个组织登录之后,这个管理员,仅仅可以管理本组织的流程,岗位,部门人员信息。如果要管理其他的组织信息,需要切换。
    7. 组织之间的权限是通过OrgNo进行隔离的。
    8. 每个人员登录之后,就有WebUser.No, WebUser.Name, WebUser.FK_Dept, WebUser.OrgNo 等登录信息。
    9. 每个流程都有适用范围,在流程属性里可以配置。一个组织的可发起的流程,是由两部分组成的+ 本组织设计的流程+其他组织设计的流程设置了适用范围的流程。
    10. 对于表单的权限规则参考流程的规则,也有适用范围。
    11. 用户组与岗位都是对人员的分组,对人员的权限划分。
    12. 用户组是集团的概念,仅由admin维护。
    13. 岗位则是每个组织都有自己的一套独立的岗责体系,由自己的组织管理员来维护的。
    14. 用户组,用户组类型没有OrgNo, 但是岗位,与岗位类型有。
    15. 用户组类型,岗位类型,都是为了方便管理员操作的方便,没有计算意义。
    16. 一个操作员可以有多个部门,数据存储到Port_DeptEmp,里面FK_Dept,FK_Emp两个列。
    17. 一个操作员在一个部门下可以有多个岗位, Port_DeptEmpStation , 列如下:FK_Dept,FK_Emp,FK_Station. 三个外键列存储。
    18. 操作员与用户组的关系存储在 Port_TeamEmp表里, FK_Team,FK_Emp 两个列。
    19. 一个操作员,有三个维度来控制,用户组、岗位、部门。
    20. 为了方便我们管理,我们把岗位或者用户组划分为,抽象的岗位,实际的岗位,抽象的用户组,实际的用户组。
    21. 比如我们把岗位划分为:部门负责人岗位,部门领导岗,信息部主任岗,信息部副主任岗。张三有部门负责人岗位,信息部主任岗。李四有部门领导岗,信息部副主任岗位。这样换分有利于我们在绑定节点岗位的时候容易处理。
    22. 用户组的概念是集团的admin管理员统一管理与维护的,可以下分到每个组织可以使用。在节点访问规则支持绑定用户组功能。
      1. 组织、部门、用户组、岗位操作界面
        1. 管理员登录

    登录页面

    选择管理的组织

    登录后切换组织

        1. 组织(分公司)管理
          1. 独立组织列表

     

          1. 把一个部门设置为独立组织

     

     

          1. 独立组织的管理员

     

        1. 超级管理员admin的权限组,权限组类别维护

     

     

     

        1. 组织人员,岗位,用户组维护-管理

     

        1. 二级管理员(分公司)的岗位类型,岗位维护

     

     

     

     

    ==OVER==

     

     

     

     

    展开全文
  • 系统角色权限设计与实现

    千次阅读 2019-02-11 10:16:44
     网上有很多角色权限验证的框架,这里是小编自己悟的一个思路不知道方便不方便大家伙可以参考一下角色权限设计思路。(本思路适合ifram嵌套页面和正常跳转页面两种,具体实现是ifram页面的具体实现) a:首先第...

    1.设计理念

     网上有很多角色权限验证的框架,这里是小编自己悟的一个思路不知道方便不方便大家伙可以参考一下角色权限的设计思路。(本思路适合ifram嵌套页面和正常跳转页面两种,具体实现是ifram页面的具体实现)

    a:首先第一点就是设计数据库:

    下面先说说说说涉及到的表吧--

    资源表(这里是存放项目资源信息的表,比如说项目的菜单URL,菜单的名称,功能菜单的URL,功能名称,及唯一的标识码)。

    角色表(这里是存放用户角色的信息)

    资源角色关联表(存放用户角色所关联的资源ID信息)

    b:后台的实现思路:

    主要验证登陆用户的角色信息的过滤都是放在项目拦截器中,可以自定义一个注解标识controller里面的方法请求之前会验证用户的角色是否包含这个url不包含的就是没有权限操作的模块。

    c:前台的实现思路:

    前台的作用就是控制隐藏菜单和功能按钮。怎么控制呢--

    第一步就是先动态加载出来菜单:用户登陆后第一步就是从后台用户角色信息中吧所有的资源菜单关联出来在前台循环出来菜单。

    第二步就是把所有的功能按钮都给获取存到前台JSP或者JS中,然后定义过滤按钮的规则,这边可以自定义标签的中属性R_V,

    使用JS获取每个加载的页面所有的标签,在获取自定义的属性R_V标签,当然R_V标签中写的是每个标签在资源表中的唯一标识。

    第三步就是使用JS获取R_V标签中的属性值和保存的所有功能按钮的唯一标识进行比较,不存在说明没有权限,吧本标签的remove掉就是删除掉,来达到我们控制功能按钮的目的。

    2.数据库设计

    资源表resources

    序号    字段英文    中文    类型    是否为空    是否主键    备注
    1    id    唯一ID    int(11)    NO    PRI    
    2    code    编码    varchar(255)    YES        
    3    murl    菜单URL    varchar(255)    YES        
    4    furl    功能URL    varchar(255)    YES        
    5    type    资源类型    int(11)    YES        
    6    pid    0 系统父级  1功能菜单 其他保存父级ID    int(11)    YES        
    7    status    0启用 1停用    int(11)    YES        
    8    name    资源名称    varchar(255)    YES        
    9    sort    排序号    int(11)    YES        
    10    css    CSS样式    varchar(255)    YES        
    11    display    是否显示    varchar(255)    YES        

    角色表roles

    序号    字段英文    中文    类型    是否为空    是否主键    备注
    1    id    唯一ID    int(11)    NO    PRI    
    2    name    角色名称    varchar(255)    YES        
    3    code    角色代码    varchar(255)    YES        
    4    cdate    创建时间    datetime    YES        
    5    cusers    创建人    varchar(255)    YES        
    6    udate    修改时间    datetime    YES        
    7    uusers    修改人    varchar(255)    YES               

    角色资源关联表rolres      

    序号    字段英文    中文    类型    是否为空    是否主键    备注
    1    roleid    角色ID    int(11)    YES    MUL    
    2    resroucesid    资源ID    int(11)    YES        
    3    id    主键    int(255)    NO    PRI    

    3.后台实现

    自定义注解Vial.java

    package com.accp.common;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target(value = { ElementType.TYPE, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Vial {
    
    }

    在拦截器中实现拦截coutroller中带有@Vial注解的方法

                Vial methodVial = handlermethod.getMethodAnnotation(Vial.class);
    			Vial classVial = handlermethod.getBeanType().getAnnotation(Vial.class);
    
    			// 没有声明权限,放行
    			if (null == methodVial && null == classVial) {
    				return true;
    			}else{
                    //验证本用户中是否关联资源中的URL
    				if(RoleChecked.RoleChecked(requestUrl)){
    					returnAlert(request,response,"无操作权限请联系管理员,确定将返回登录页面重新登录!",1);
    					return false;
    				}else{
    					return true;
    				}
    			}

    4.前台实现

    先把用户登陆后的资源权限唯一编码从数据库取出存在页面的隐藏域中。

    <input type="hidden" value="${codeList }" id="hidcode"/>

    在引用写的JS验证角色权限的脚本

    <script src="<%=request.getContextPath() %>/js/web/pub/role.validation.js"></script>
    //功能按钮角色验证的初始化函数
    var a;
    var init = function(iframId,r_v_data){
    	a = r_v_data;
    	get_Ifram(iframId);
    	
    }
    var  nodes = [];
    
    var get_Ifram = function(iframId){
    	var iframe = document.getElementById(iframId);
    	if (iframe.attachEvent) {
    	    iframe.attachEvent("onload", function () {
    	    	get_R_V(iframe.contentWindow.document);
    	    });
    	} else {
    	    iframe.onload = function () {
    	    	get_R_V(iframe.contentWindow.document);
    	    };
    	}
    }
    
    var get_R_V = function(obj){
    	dfs(obj.body);
    }
    
    function dfs(node) {
    	if(node!=null){
    	    if(node.nodeType === 1) {
    	        var tagName = node.tagName;
    	        if(node.getAttribute('R_V') != null){
    	        	 if(a.indexOf(node.getAttribute('R_V'))==-1){
    	        		 if(isIE()||isIE11()){
    	        			 node.removeNode(true); 
    	        		 }else{
    	        			 node.remove();
    	        		 }
    	             }
    	        }
    	        
    	        var children = node.childNodes;
    	        for(var i = 0, len = children.length; i < len; i++) {
    	            dfs(children[i]);
    	        }
    	    }
    	}
    }
    
    function isIE(){
    	if(!!window.ActiveXObject || "ActiveXObject" in window){
    		return true;
    	}else{
    		return false;
    	}
    } 
    function isIE11(){
    	if((/Trident\/7\./).test(navigator.userAgent)){
    	   return true;
    	}else{
    		return false;
    	}
    }
    

    首页初始化调用初始化函数

    //每次页面ifram中的url重新加载就要验证呀功能
    function iframSrc(url,id){
    	document.getElementById("frame").src =  url;
    	init("frame",$("#hidcode").val());
    	
    }

    好了这边只是给大家说个大概的思路具体实现根据思路可以完成,也希望大家能够多多补充哪里不足

    展开全文
  • 数据权限指的是数据级别的权限设计,立足点在于组织机构(岗位、部门、公司)和流程,对应的用户没有对某些数据的访问权限。本文档旨在设计数据权限的控制方案,完善产品数据权限的控制。 设计思路 通过之前平台规定...

    概述

    系统权限可分为很多种。常用到的有操作权限和数据权限。操作权限是有或者没有某种操作的权限,具体表现形式可为看到或者看不到某个菜单或者功能按钮。数据权限指的是数据级别的权限设计,立足点在于组织机构(岗位、部门、公司)和流程,对应的用户没有对某些数据的访问权限。本文档旨在设计数据权限的控制方案,完善产品数据权限的控制。

    设计思路

    通过之前平台规定每张业务表的必备字段(公司、创建人、流程参与人)来设计一些规则来配置某个程序的数据权限控制规则。设计数据权限配置程序来配置单个程序或者批量配置一批程序的权限规则。程序在运行过程中根据配置的数据权限控制规则来动态构建查询SQL,从而达到数据权限的控制。各个数据级权限控制规则为or的关系。

    数据权限控制规则

    梳理现有业务场景以及业务程序数据表的结构。整理出以下一些可以进行配置的规则:

    1、数据建立用户

    即当前程序记录的创建人,配置此选项后非当前记录的建立人不能看到此记录。
    建议:如果程序开启数据权限控制,此选项默认勾选,并且不能去除,否则如果配置了其他控制规则,业务记录的创建人都不能看到自己创建的记录。

    2、建立人直接上级岗位

    即当前程序记录创建人的直接上级岗位的用户能看到此记录。
    考虑到当前建立用户可能在不同公司有不同的岗位,或者在同一个公司也可能有多个岗位。这里取用户岗位时获取的是数据建立用户在当前记录中的公司所拥有的主岗的岗位号(没有主岗取所有副岗)。然后根据取到的岗位去获取其直接上级岗位。

    3、建立人所有上级岗位

    即当前程序记录创建人的所有上级岗位(需要进行递归)的用户能看到此记录。取用户岗位的逻辑参考第2条。

    4、建立人当前部门

    即当前程序记录创建人所在部门的用户能看到此记录。
    考虑到当前建立用户可能在不同公司有不同的部门,或者在同一个公司也属于不同的部门。这里取用户的部门时获取的是建立用户在当前记录中的公司中所属的主岗所在的部门的部门号(没有主岗取所有副岗所属的部门号)。

    5、建立人所有上级部门

    即当前程序记录创建人所在部门的所有上级部门(需要进行递归)中的用户能看到此记录。(不包括当前部门)
    取部门的逻辑参考第4条。

    6、当前公司

    即当前程序记录中的公司下的所有用户能看到此记录。
    备注:
    (1)配置公司数据级权限时需要考虑和平台公司条件的关系,是否取交集、并集或者是去除平台公司条件?
    (2)同时需要考虑S页面公司列查询时用户能选到的公司

    7、所有上级公司

    即当前程序记录中的公司的所有上级公司都能看到此记录。(不包括当前公司)

    8、流程参与人

    如果当前记录走流程,则所有的流程处理人(已处理和待处理)和知会人都能看到此记录。
    问题:
    1、所有流程的参与人具体包含哪些用户?
    2、每一类型的参与人是否需要进行分类配置?

    备注:
    (1)在配置了第6条“当前公司”规则时,在解析条件时,可以忽略2、3、4、5条中配置的条件。

    (2)特殊岗位的情况,某些领导拥有查看所有数据的权限。 

    /**
     * 贴一段初始化数据级权限的逻辑吧
     * @author chengmeng
     */
    public static void initDataPer(DataDom dataDom){
        //1.获取数据级权限的配置项
    	//2.获取当前登录人的当前部门/当前岗位/所有下级部门/所有下级岗位
        //3.特殊岗位可以查看所有数据(此处所有数据是指在平台基本条件下的所有数据)
        //4.根据配置规则拼接SQL语句
        //4-1.创建者
        //4-2.流程参与者(不从配置中读取,默认)
        //4-3.部门和岗位类
        //所有部门包含所在部门和子部门;所有岗位包含所在岗位和下级岗位;
        //如果配置了所在部门即包含了所在岗位;如果配置了所在岗位即包含了下级岗位
    }

     

    展开全文
  • B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过...下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。
  • 该文章描述了角色的定义,以及权限的划分等含义并给出部分实现代码示例。数据库表设计如下图所示:   user和user_basicinfo:记录用户资料。  role:角色表,记录公司各种角色,比如:管理员,销售,销售主管,...
  • ASP.NET系统用户权限设计与实现 电子商务系统对安全问题有较高的要求,传统的访问控制方法DAC(Discretionary Access Control,自主访问控制模型)、MAC(Mandatory Access Control,强制访问控制模型)难以满足复杂...
  • ​最近领导交给我一个任务,调研市场上的BI产品给我们新的web项目需要做权限控制。我们的项目数据权限控制比较简单,例如,各部门只能看他和他的下级部门的订单列表(order);记录当前用户的各种信息,包括用户名和...
  • ASP.NET系统用户权限设计与实现1

    千次阅读 2007-04-13 09:37:00
    ASP.NET系统用户权限设计与实现12007-04-06 11:22 电子商务系统对安全问题有较高的要求,传统的访问控制方法DAC(Discretionary Access Control,自主访问控制模型)、MAC(Mandatory Access Control,强制访问控制...
  • 这是一款基于RBAC的通用权限管理软件,使用了三层+easyui+mvc开发,其中包含了用户管理,角色管理和部门管理,对权限的分配时按钮级别的。
  • 摘 要 针对管理信息系统中用户权限的复杂性 ...’ $ )在管理信息系统中用户权限控制的一种具体实现方法 实际运行结果表明 本文的设计方案具有运行稳定 使用简单等优点 ’ ! % % 关键词 角色访问控制 用户控件 )*+,-./

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,473
精华内容 1,789
关键字:

权限设计与实现