多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > 權限的分配與使用

權限的分配與使用

來源:程序員人生   發布時間:2015-04-24 07:58:33 閱讀次數:4212次

權限:控制功能的使用

web中權限的利用:

1、1個功能對應1個或多個URL

2、對功能的控制就是對URL地址訪問的控制

權限方案:

1、用戶的權限就是用戶的所有角色的權限的合集

2、1個功能是不是能被某用戶使用,是判斷用戶權限中是不是有這個功能的使用許可。


步驟:

1、初始化權限

權限是不可變的,在第1次使用時就已肯定了。所以我們可以  insert into。。。。

Session session=sessionFactory.getCurrentSession(); //保存超級管理員用戶 User user=new User(); user.setLoginName("admin"); user.setPassword(DigestUtils.md5Hex("admin")); user.setName("超級管理員"); session.save(user); //保存權限數據 Privilege menu,menu1,menu2,menu3; menu=new Privilege("系統管理",null,null); menu1=new Privilege("部門管理","/department_list",menu); menu2=new Privilege("崗位管理","/role_list",menu); menu3=new Privilege("用戶管理","/user_list",menu); session.save(menu); session.save(menu1); session.save(menu2); session.save(menu3); session.save(new Privilege("部門列表","/department_list",menu1)); session.save(new Privilege("部門刪除","/department_delete",menu1)); session.save(new Privilege("部門添加","/department_add",menu1)); session.save(new Privilege("部門修改","/department_edit",menu1)); session.save(new Privilege("崗位列表","/role_list",menu2)); session.save(new Privilege("崗位刪除","/role_delete",menu2)); session.save(new Privilege("崗位添加","/role_add",menu2)); session.save(new Privilege("崗位修改","/role_edit",menu2)); session.save(new Privilege("用戶列表","user_list",menu3)); session.save(new Privilege("用戶刪除","user_delete",menu3)); session.save(new Privilege("用戶添加","user_add",menu3)); session.save(new Privilege("用戶修改","user_edit",menu3)); menu=new Privilege("網上交換",null,null); menu1=new Privilege("論壇管理","/forumManage_list",menu); menu2=new Privilege("論壇","/forum_list",menu); session.save(menu); session.save(menu1); session.save(menu2);

2、分配權限

給角色分配權限,用戶的權限就是用戶的所有角色的權限的合集

分配權限類似于修改

public String setPrivilegeUI(){ //準備回顯數據 Role role=roleService.find(model.getId()); ActionContext.getContext().getValueStack().push(role); if(role.getPrivileges()!=null){ privilegeIds=new Long[role.getPrivileges().size()]; int index=0; for(Privilege privilege : role.getPrivileges()){ privilegeIds[index++]=privilege.getId(); } } // List<Privilege> list=privilegeService.getAll(); // ActionContext.getContext().put("list", list); return "setPrivilegeUI"; } /** * 分配權限 * @return */ public String setPrivilege(){ //1、從數據庫中獲得修改對象 Role role=roleService.find(model.getId()); //2、設置修改數據 List<Privilege> list=privilegeService.getByIds(privilegeIds); role.setPrivileges(new HashSet<Privilege>(list)); //3、更新到數據庫 roleService.save(role); return "toList"; }

jsp頁面-----顯示樹狀結構

<%@ page language="java" import="java.util.*" pageEncoding="UTF⑻"%> <%@include file="/WEB-INF/jsp/public/commons.jspf"%> <html> <head> <title>配置權限</title> <script language="javascript" src="${pageContext.request.contextPath }/script/jquery_treeview/jquery.treeview.js"></script> <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/style/blue/file.css" /> <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath }/script/jquery_treeview/jquery.treeview.css" /> <script type="text/javascript"> $(function(){ $("[name=privilegeIds]").click(function(){ //當選中或取消權限時,也同時選中或取消下級元素 $(this).siblings("ul").find("input").attr("checked",this.checked); //當選中1個權限時,也同時選中直接上級 if(this.checked==true){ $(this).parents("li").children("input").attr("checked",true); } }); }); $(function() { $("#tree").treeview(); }); </script> </head> <body> <!-- 標題顯示 --> <div id="Title_bar"> <div id="Title_bar_Head"> <div id="Title_Head"></div> <div id="Title"> <!--頁面標題--> <img border="0" width="13" height="13" src="${pageContext.request.contextPath }/style/images/title_arrow.gif" /> 配置權限 </div> <div id="Title_End"></div> </div> </div> <!--顯示表單內容--> <div id=MainArea> <s:form action="role_setPrivilege"> <s:hidden name="id"></s:hidden> <div class="ItemBlock_Title1"> <!-- 信息說明 --> <div class="ItemBlock_Title1"> <img border="0" width="4" height="7" src="${pageContext.request.contextPath }/style/blue/images/item_point.gif" /> 正在為【${name } }】配置權限 </div> </div> <!-- 表單內容顯示 --> <div class="ItemBlockBorder"> <div class="ItemBlock"> <table cellpadding="0" cellspacing="0" class="mainForm"> <!--表頭--> <thead> <tr align="LEFT" valign="MIDDLE" id="TableTitle"> <td width="300px" style="padding-left: 7px;"> <!-- 如果把全選元素的id指定為selectAll,并且有函數selectAll(),就會有錯。由于有1種用法:可以直接用id援用元素 --> <input type="CHECKBOX" id="cbSelectAll" onClick="$('[name=privilegeIds]').attr('checked',this.checked)" /> <label for="cbSelectAll">全選</label> </td> </tr> </thead> <!--顯示數據列表--> <tbody id="TableData"> <tr class="TableDetail1"> <!-- 顯示權限樹 --> <td> <!-- <s:checkboxlist name="privilegeIds" list="#list" listKey="id" listValue="name"></s:checkboxlist> --> <%-- <s:iterator value="#list"> <input type="checkbox" name="privilegeIds" value="${id }" id="lb_${id }" <s:property value="%{id in privilegeIds ? 'checked' : '' }"/> /> <label for="lb_${id }">${name }</label> <br/> </s:iterator> --%> <ul id="tree"> <s:iterator value="#application.topPrivilegeList"> <li> <input type="checkbox" name="privilegeIds" value="${id }" id="lb_${id }" <s:property value="%{id in privilegeIds ? 'checked' : '' }"/>/> <label for="lb_${id }"><span class="folder">${name }</span></label> <ul> <s:iterator value="children"> <li> <input type="checkbox" name="privilegeIds" value="${id }" id="lb_${id }" <s:property value="%{id in privilegeIds ? 'checked' : '' }"/>/> <label for="lb_${id }"><span class="folder">${name }</span></label> <ul> <s:iterator value="children"> <li><input type="checkbox" name="privilegeIds" value="${id }" id="lb_${id }" <s:property value="%{id in privilegeIds ? 'checked' : '' }"/>/> <label for="lb_${id }"><span class="folder">${name }</span></label></li> </s:iterator> </ul> </li> </s:iterator> </ul> </li> </s:iterator> </ul> </td> </tr> </tbody> </table> </div> </div> <!-- 表單操作 --> <div id="InputDetailBar"> <input type="image" src="${pageContext.request.contextPath }/style/images/save.png" /> <a href="javascript:history.go(⑴);"><img src="${pageContext.request.contextPath }/style/images/goBack.png" /></a> </div> </s:form> </div> <div class="Description"> 說明:<br /> 1,選中1個權限時:<br />      a,應當選中 他的所有直系上級。<br />      b,應當選中他的所有直系下級。<br /> 2,取消選擇1個權限時:<br />      a,應當取消選擇 他的所有直系下級。<br />      b,如果同級的權限都是未選擇狀態,就應當取消選中他的直接上級,并遞歸向上做這個操作。<br /> 3,全選/取消全選。<br /> 4,默許選中當前崗位已有的權限。<br /> </div> </body> </html>

3、根據權限顯示菜單

<div id="Menu"> <ul id="MenuUl"> <%--顯示1級菜單 --%> <s:iterator value="#application.topPrivilegeList"> <s:if test="#session.user.hasPrivilegeByName(name)"> <li class="level1"> <div onClick="menuClick(this)" class="level1Style"> <img src="style/images/MenuIcon/${id }.gif" class="Icon" />${name } </div> <ul id="aa" class="MenuLevel2"> <%--顯示2級菜單 --%> <s:iterator value="children"> <s:if test="#session.user.hasPrivilegeByName(name)"> <li class="level2"> <div class="level2Style"> <img src="style/images/MenuIcon/menu_arrow_single.gif" /> <a target="body" href="${pageContext.request.contextPath }${url}.action">${name }</a> </div> </li> </s:if> </s:iterator> </ul> </li> </s:if> </s:iterator> </ul> </div>

4、根據權限顯示鏈接

重寫<s:a></s:a>標簽

public int doEndTag() throws JspException { User user=(User) pageContext.getSession().getAttribute("user"); String privUrl="/"+action; if(user.hasPrivilegeByUrl(privUrl)){ return super.doEndTag(); }else{ return EVAL_PAGE; } }


5.攔截每個action要求,驗證用戶是不是有權限訪問

用struts的 interceptor攔截

public String intercept(ActionInvocation invocation) throws Exception { String result=null; User user= (User) ActionContext.getContext().getSession().get("user"); String namespace=invocation.getProxy().getNamespace(); String actionName=invocation.getProxy().getActionName(); String privUrl=namespace+actionName; //未登入,轉到登入頁面 if(user==null){ //如果是去登入,就放行 if(privUrl.startsWith("/user_login")){ return invocation.invoke(); }else{ //如果不是去登入,就轉到登入頁面 return "loginUI"; } } //已登入,判斷是不是有權限 else{ if(user.hasPrivilegeByUrl(privUrl)){ //有,放行 return invocation.invoke(); }else{ //無,轉到提示頁面 return "noPrivilege"; } } }






補上怎樣判斷用戶是不是有權限的代碼

/** * 判斷本用戶是不是有指定的名稱權限 * * @return */ public boolean hasPrivilegeByName(String name) { // 超級管理員 if (isAdmin()) { return true; } // 普通用戶 for (Role role : roles) { for (Privilege privilege : role.getPrivileges()) { if (privilege.getName().equals(name)) { return true; } } } return false; } /** * 判斷本用戶是不是有指定的url權限 * * @return */ public boolean hasPrivilegeByUrl(String privUrl) { // 超級管理員 if (isAdmin()) { return true; } int pos = privUrl.indexOf("?"); if (pos > ⑴) { privUrl = privUrl.substring(0, pos); if (privUrl.endsWith("UI")) { privUrl = privUrl.substring(0, privUrl.length() - 2); } } Collection<Privilege> allPrivilege = (Collection<Privilege>) ActionContext.getContext().getApplication().get("allPrivilege"); // 如果本url不需要控制,則登入用戶就能夠使用 if (!allPrivilege.contains(privUrl)) { return true; } else { // 普通用戶 for (Role role : roles) { for (Privilege privilege : role.getPrivileges()) { if (privUrl.equals(privilege.getUrl())) { return true; } } } } return false; } /** * 判斷本用戶是否是超級用戶 * * @return */ private boolean isAdmin() { return "admin".equals(loginName); }






生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久大香伊焦在人线免费 | 最近中文字幕在线观看 | 国内精品一区视频在线播放 | 中文字幕一二三区乱码老 | 久久久久久久国产 | 亚洲日本1区2区3区二区 | 精品综合 | 国产h肉在线视频免费观看 国产h视频 | 亚洲色图另类小说 | 亚洲国产精品一区 | 久久91精品国产91久 | 香蕉高清免费永久在线视频 | jizz日本zzz老师水多视频 | japanbabes日本护士18免费 | 国产亚洲综合一区二区在线 | 最近中文字幕mv免费高清视频免费 | 女人18特级一级毛片免费视频 | 欧美毛片免费观看 | 久草在线免费色站 | 亚洲啪在线 | 免费在线看h| 国产精品极品美女免费观看 | a级艳片武则天 | 一二区 | 男女日日 | 美国毛片一级视频在线aa | 国产欧美精品专区一区二区 | 国产成人毛片亚洲精品不卡 | 成人无高清96免费 | 视频在线国产 | 国产69精品久久久久999三级 | 最近在线更新中文字幕3 | 99精品久久秒播无毒不卡 | 欧美日韩国产色综合一二三四 | 在线观看美女网站 | 久草在线视频福利资源站 | 性xxx欧美| 国产视频一二 | 精品一区二区三区四区五区 | 嗯啊在线观看免费影院 | 波多野结衣 在线资源观看 波多野结衣 一区二区 |