ERP系統常見的問題:操作權限、資料權限的解決方案
1、頁面:通過權限控制某個頁面是否顯示
2、按鈕:通過權限控制某個頁面上的按鈕是否顯示
3、方法:通過權限控制某個方法是否能夠通路
4、資料行:通過權限控制某個使用者隻能看到幾行資料
背景設定權限
1、操作權限:添加計劃、修改計劃、搜尋計劃權限
2、資料權限:本人、本部門、所有
<a href="http://s4.51cto.com/wyfs02/M00/89/C6/wKioL1gcNLyChXGlAAAZxjYH_e4461.png-wh_500x0-wm_3-wmp_4-s_1752563337.png" target="_blank"></a>
實作設定
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
<code>function</code> <code>loadMenu(){</code>
<code> </code><code>$.ajax({</code>
<code> </code><code>url : </code><code>""</code><code>,</code>
<code> </code><code>type : </code><code>"post"</code><code>,</code>
<code> </code><code>dataType : </code><code>"jsonp"</code><code>,</code>
<code> </code><code>jsonp: </code><code>"jsonpCallback"</code><code>,</code>
<code> </code><code>success : </code><code>function</code><code>(result) {</code>
<code> </code>
<code> </code><code>var</code> <code>lefthtml=</code><code>"<li><a href=''><i class='fa fa-tachometer fa-fw'></i> <span class='menu-text'>首頁</span></a> </li>"</code><code>;</code>
<code> </code><code>var</code> <code>category=</code><code>""</code><code>;</code>
<code> </code><code>var</code> <code>i=0;</code>
<code> </code><code>$(result.leftModule).each(</code><code>function</code><code>(){ </code>
<code> </code><code>if</code><code>(</code><code>this</code><code>.categoryName!=category){</code>
<code> </code><code>if</code><code>(i!=0){</code>
<code> </code><code>lefthtml=lefthtml+</code><code>"</ul></li>"</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<li class='has-sub'>"</code><code>;</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<a href='javascript:;' class=''>"</code><code>;</code>
<code> </code><code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"客源管理"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-user fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code> <code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"房源管理"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-home fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code> <code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"我的首頁"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-bookmark-o fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code> <code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"簽約管理"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-edit fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code> <code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"文檔公告管理"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-folder-open fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code> <code>if</code><code>(</code><code>this</code><code>.categoryName==</code><code>"跟進管理"</code><code>){</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<i class='fa fa-hand-o-right fa-fw'></i> <span class='menu-text'>"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"</span>"</code><code>;</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<span class='arrow'></span>"</code><code>;</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"</a>"</code><code>;</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<ul class='sub'>"</code><code>;</code>
<code> </code><code>lefthtml=lefthtml+ </code><code>"<li><a class='' href='"</code><code>+</code><code>this</code><code>.link+</code><code>"'><span class='sub-menu-text'>"</code><code>+</code><code>this</code><code>.moduleName+</code><code>"</span></a></li>"</code><code>; </code>
<code> </code><code>category=</code><code>this</code><code>.categoryName;</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>}</code>
<code> </code><code>if</code><code>(i==result.leftModule.length-1){</code>
<code> </code><code>lefthtml=lefthtml+</code><code>"</ul></li>"</code><code>;</code>
<code> </code><code>i++;</code>
<code> </code><code>});</code>
<code> </code><code>$(</code><code>"#leftMenu"</code><code>).html(lefthtml);</code>
<code> </code><code>},</code>
<code> </code><code>error : </code><code>function</code><code>(err) {</code>
<code> </code><code>}</code>
<code> </code><code>});</code>
2、按鈕 跟進登入人查詢該使用者有哪些權限碼,在每個按鈕的設定auth-code="shs_pair"屬性
<code>function</code> <code>valideAction(){</code>
<code> </code><code>url :</code><code>""</code><code>,</code>
<code> </code><code>type:</code><code>"post"</code><code>,</code>
<code> </code><code>data: {actionCookies:$.cookie(</code><code>'actionCookie'</code><code>)},</code>
<code> </code><code>dataType: </code><code>"jsonp"</code><code>,</code>
<code> </code><code>jsonp:</code><code>"jsonpCallback"</code><code>,</code>
<code> </code><code>success :</code><code>function</code><code>(result){</code>
<code> </code><code>var</code> <code>authCodeArray= </code><code>new</code> <code>Array();</code>
<code> </code><code>$(result).each(</code><code>function</code><code>(){ </code>
<code> </code><code>authCodeArray.push(</code><code>this</code><code>.actionCode);</code>
<code> </code><code>});</code>
<code> </code><code>$(</code><code>"[auth-code]"</code><code>).each(</code><code>function</code><code>(){</code>
<code> </code><code>var</code> <code>auth_code=$(</code><code>this</code><code>).attr(</code><code>"auth-code"</code><code>);</code>
<code> </code><code>if</code><code>($.inArray(auth_code, authCodeArray)==-1){</code>
<code> </code><code>$(</code><code>this</code><code>).remove();</code>
<code> </code><code>});</code>
<code> </code>
<code>}</code>
3、方法 通過權限攔截器
<code>public</code> <code>String intercept(ActionInvocation invocation) </code><code>throws</code> <code>Exception {</code>
<code> </code><code>ActionContext actionContext = invocation.getInvocationContext();</code>
<code> </code><code>HttpServletRequest request = (HttpServletRequest) actionContext</code>
<code> </code><code>.get(StrutsStatics.HTTP_REQUEST);</code>
<code> </code><code>HttpServletResponse response = (HttpServletResponse) actionContext</code>
<code> </code><code>.get(StrutsStatics.HTTP_RESPONSE);</code>
<code> </code><code>ActionProxy actionProxy = invocation.getProxy();</code>
<code> </code><code>String methodName = actionProxy.getMethod();</code>
<code> </code><code>if</code> <code>(StringUtils.isBlank(methodName)) {</code>
<code> </code><code>methodName = </code><code>"execute"</code><code>;</code>
<code> </code><code>Class aClass = actionProxy.getAction().getClass();</code>
<code> </code><code>Method method = aClass.getMethod(methodName);</code>
<code> </code><code>PermissionsCode annotation = method</code>
<code> </code><code>.getAnnotation(PermissionsCode.</code><code>class</code><code>);</code>
<code> </code><code>String pin = (String) ActionContext.getContext().get(SystemDict.ERP_PIN);</code>
<code> </code><code>/* String actionCookie= cookieUtil.getCookieValue(cookieKeyName);</code>
<code> </code><code>String actionJson= SecurityUtil.decrypt(actionCookie,cookieEncrypt.get("desPrefix"));*/</code>
<code> </code><code>LOG.info("登入人pin----------------"+pin);</code>
<code> </code><code>if (pin!=null&&!pin.equals(adminPin)) {</code>
<code> </code><code>/*List<Map<String,Object>> listPermissions=null;</code>
<code> </code><code>if(actionJson!=null){</code>
<code> </code><code>listPermissions= JsonUtil.fromJson(actionJson,List.class,Map.class);</code>
<code> </code><code>}*/</code>
<code> </code><code>List<ActionResult> actionlist=actionRpc.getActionList(pin);</code>
<code> </code><code>if</code> <code>(annotation != </code><code>null</code> <code>&& StringUtils.isNotBlank(annotation.code())) {</code>
<code> </code><code>String code = annotation.code();</code>
<code> </code><code>if</code><code>(actionlist!=</code><code>null</code> <code>&& actionlist.size()!=</code><code>0</code><code>){</code>
<code> </code><code>for</code><code>(ActionResult action : actionlist){</code>
<code> </code><code>if</code><code>(code.equals(action.getActionCode())){</code>
<code> </code><code>//如果正确則繼續執行</code>
<code> </code><code>this</code><code>.setScopeContext(action.getScope());</code>
<code> </code><code>return</code> <code>invocation.invoke();</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>//如果沒有權限碼則跳過</code>
<code> </code><code>return</code> <code>invocation.invoke();</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>//如果是admin跳過權限碼</code>
<code> </code><code>return</code> <code>invocation.invoke();</code>
<code> </code><code>//跳轉錯誤頁面</code>
<code> </code><code>this</code><code>.redirect(request, response);</code>
<code> </code><code>return</code> <code>null</code><code>;</code>
<code> </code><code>}</code>
4、資料行:首先使用者有這個權限,同時擷取出該權限的權限範圍(本人、本部門、所有)
根據使用者的權限範圍查詢資料行
本文轉自 xinsir999 51CTO部落格,原文連結:http://blog.51cto.com/xinsir/1869480,如需轉載請自行聯系原作者