操作权限,数据权限的解决方案

简介:

ERP系统常见的问题:操作权限、数据权限的解决方案

 1、页面:通过权限控制某个页面是否显示

 2、按钮:通过权限控制某个页面上的按钮是否显示

 3、方法:通过权限控制某个方法是否能够访问

 4、数据行:通过权限控制某个用户只能看到几行数据

后台设置权限

 1、操作权限:添加计划、修改计划、搜索计划权限

 2、数据权限:本人、本部门、所有

wKioL1gcNLyChXGlAAAZxjYH_e4461.png-wh_50

实现设置

 1、页面:通过请求查询用户有哪些权限-有哪些模块

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function  loadMenu(){
     $.ajax({
         url :  "" ,
         type :  "post" ,
         dataType :  "jsonp" ,
         jsonp:  "jsonpCallback" ,
         success :  function (result) {
             
             var  lefthtml= "<li><a href=''><i class='fa fa-tachometer fa-fw'></i> <span class='menu-text'>首页</span></a>  </li>" ;
             var  category= "" ;
             var  i=0;
             $(result.leftModule).each( function (){ 
                 if ( this .categoryName!=category){
                     if (i!=0){
                         lefthtml=lefthtml+ "</ul></li>" ;
                     }
                     lefthtml=lefthtml+   "<li class='has-sub'>" ;
                     lefthtml=lefthtml+   "<a href='javascript:;' class=''>" ;
                     if ( this .categoryName== "客源管理" ){
                         lefthtml=lefthtml+   "<i class='fa fa-user fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else  if ( this .categoryName== "房源管理" ){
                         lefthtml=lefthtml+   "<i class='fa fa-home fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else  if ( this .categoryName== "我的首页" ){
                         lefthtml=lefthtml+   "<i class='fa fa-bookmark-o fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else  if ( this .categoryName== "签约管理" ){
                         lefthtml=lefthtml+   "<i class='fa fa-edit fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else  if ( this .categoryName== "文档公告管理" ){
                         lefthtml=lefthtml+   "<i class='fa fa-folder-open fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else  if ( this .categoryName== "跟进管理" ){
                         lefthtml=lefthtml+   "<i class='fa fa-hand-o-right fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     } else {
                         lefthtml=lefthtml+   "<i class='fa fa-bookmark-o fa-fw'></i> <span class='menu-text'>" + this .categoryName+ "</span>" ;
                     }
                     lefthtml=lefthtml+   "<span class='arrow'></span>" ;
                     lefthtml=lefthtml+   "</a>" ;
                     lefthtml=lefthtml+   "<ul class='sub'>" ;
                     lefthtml=lefthtml+   "<li><a class='' href='" + this .link+ "'><span class='sub-menu-text'>" + this .moduleName+ "</span></a></li>" ;   
                     category= this .categoryName;
                 } else {
                     lefthtml=lefthtml+   "<li><a class='' href='" + this .link+ "'><span class='sub-menu-text'>" + this .moduleName+ "</span></a></li>" ;   
                 }
                 if (i==result.leftModule.length-1){
                     lefthtml=lefthtml+ "</ul></li>" ;
                 }
                 i++;
                 });
             $( "#leftMenu" ).html(lefthtml);
         },
         error :  function (err) {
         }
     });

   2、按钮 跟进登录人查询该用户有哪些权限码,在每个按钮的设置auth-code="shs_pair"属性

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function  valideAction(){
     $.ajax({
         url : "" ,
         type: "post" ,
         data: {actionCookies:$.cookie( 'actionCookie' )},
         dataType:  "jsonp" ,
         jsonp: "jsonpCallback" ,
         success : function (result){
             var  authCodeArray=  new  Array();
             $(result).each( function (){ 
                 authCodeArray.push( this .actionCode);
        });
             $( "[auth-code]" ).each( function (){
                 var  auth_code=$( this ).attr( "auth-code" );
                 if ($.inArray(auth_code, authCodeArray)==-1){
                      $( this ).remove();
                 }
              });
         }
     });
     
     
}

 3、方法 通过权限拦截器

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public  String intercept(ActionInvocation invocation)  throws  Exception {
         ActionContext actionContext = invocation.getInvocationContext();
         HttpServletRequest request = (HttpServletRequest) actionContext
                 .get(StrutsStatics.HTTP_REQUEST);
         HttpServletResponse response = (HttpServletResponse) actionContext
                 .get(StrutsStatics.HTTP_RESPONSE);
         ActionProxy actionProxy = invocation.getProxy();
         String methodName = actionProxy.getMethod();
         if  (StringUtils.isBlank(methodName)) {
             methodName =  "execute" ;
         }
         Class aClass = actionProxy.getAction().getClass();
         Method method = aClass.getMethod(methodName);
         PermissionsCode annotation = method
                 .getAnnotation(PermissionsCode. class );
         String pin = (String) ActionContext.getContext().get(SystemDict.ERP_PIN);
        /* String actionCookie= cookieUtil.getCookieValue(cookieKeyName);
         String actionJson= SecurityUtil.decrypt(actionCookie,cookieEncrypt.get("desPrefix"));*/
         LOG.info("登录人pin----------------"+pin);
         if (pin!=null&&!pin.equals(adminPin)) {
             /*List<Map<String,Object>> listPermissions=null;
             if(actionJson!=null){
                 listPermissions= JsonUtil.fromJson(actionJson,List.class,Map.class);
             }*/
             List<ActionResult> actionlist=actionRpc.getActionList(pin);
             if  (annotation !=  null  && StringUtils.isNotBlank(annotation.code())) {
                 String code = annotation.code();
                 if (actionlist!= null  && actionlist.size()!= 0 ){
                     for (ActionResult action : actionlist){
                         if (code.equals(action.getActionCode())){
                             //如果正确则继续执行
                             this .setScopeContext(action.getScope());
                             return  invocation.invoke();
                         }
                     }
                 }
             else  {
                 //如果没有权限码则跳过
                 return  invocation.invoke();
             }
         else  {
             //如果是admin跳过权限码
             return  invocation.invoke();
         }
         //跳转错误页面
         this .redirect(request, response);
         return  null ;
     }

4、数据行:首先用户有这个权限,同时获取出该权限的权限范围(本人、本部门、所有)

 根据用户的权限范围查询数据行










本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1869480,如需转载请自行联系原作者
目录
相关文章
|
SQL JSON 数据可视化
权限开发手册,数据权限和接口权限配置
权限开发手册,数据权限和接口权限配置
1338 0
权限开发手册,数据权限和接口权限配置
|
9月前
|
SQL 关系型数据库 MySQL
|
9月前
|
存储 Linux 数据安全/隐私保护
Linux基本操作——用户操作——用户组操作
Linux基本操作——用户操作——用户组操作
81 0
|
资源调度 前端开发 数据库
权限 | 前端控制权限
啊,我们经常做权限控制,控制菜单,控制按钮功能等,但是在一些特殊情况下不能够由后端来做权限控制,那就只能前端来做啦。
112 0
|
SQL XML 缓存
修改若依的数据权限功能
修改若依的数据权限功能
1218 0
|
缓存 网络协议 安全
权限提升
权限提升
228 0
权限提升
|
XML 安全 Java
7-企业权限管理-权限操作
7-企业权限管理-权限操作
7-企业权限管理-权限操作
|
数据安全/隐私保护
13-企业权限管理-用户关联角色操作
13-企业权限管理-用户关联角色操作
13-企业权限管理-用户关联角色操作
|
数据安全/隐私保护
14-企业权限管理-角色关联权限操作
14-企业权限管理-角色关联权限操作
|
SQL 存储 数据库
数据权限这样设计,你觉得如何?
在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用RBAC模型是不够的,本文我们尝试在RBAC模型的基础上融入数据权限的管理控制。
3229 1