天天看點

操作權限,資料權限的解決方案

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>"&lt;li&gt;&lt;a href=''&gt;&lt;i class='fa fa-tachometer fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;首頁&lt;/span&gt;&lt;/a&gt;  &lt;/li&gt;"</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>"&lt;/ul&gt;&lt;/li&gt;"</code><code>;</code>

<code>                    </code><code>}</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;li class='has-sub'&gt;"</code><code>;</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;a href='javascript:;' class=''&gt;"</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>"&lt;i class='fa fa-user fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</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>"&lt;i class='fa fa-home fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</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>"&lt;i class='fa fa-bookmark-o fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</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>"&lt;i class='fa fa-edit fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</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>"&lt;i class='fa fa-folder-open fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</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>"&lt;i class='fa fa-hand-o-right fa-fw'&gt;&lt;/i&gt; &lt;span class='menu-text'&gt;"</code><code>+</code><code>this</code><code>.categoryName+</code><code>"&lt;/span&gt;"</code><code>;</code>

<code>                    </code><code>}</code><code>else</code><code>{</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;span class='arrow'&gt;&lt;/span&gt;"</code><code>;</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;/a&gt;"</code><code>;</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;ul class='sub'&gt;"</code><code>;</code>

<code>                    </code><code>lefthtml=lefthtml+  </code><code>"&lt;li&gt;&lt;a class='' href='"</code><code>+</code><code>this</code><code>.link+</code><code>"'&gt;&lt;span class='sub-menu-text'&gt;"</code><code>+</code><code>this</code><code>.moduleName+</code><code>"&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;"</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>"&lt;/ul&gt;&lt;/li&gt;"</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&amp;&amp;!pin.equals(adminPin)) {</code>

<code>            </code><code>/*List&lt;Map&lt;String,Object&gt;&gt; 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&lt;ActionResult&gt; actionlist=actionRpc.getActionList(pin);</code>

<code>            </code><code>if</code> <code>(annotation != </code><code>null</code> <code>&amp;&amp; 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>&amp;&amp; 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,如需轉載請自行聯系原作者