日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

權限的分配與使用

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

權限:控制功能的使用

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); }






生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产精品视频网 | 91精品久久久久久久久青青 | av成人毛片 | 亚洲精品乱码久久久久膏 | 31xx视频免费播放 | 免费看片黄 | 欧美激情视频一区 | 一区二区久久久 | 精品一区二区久久久久久久网站 | 精精国产 | 久久精彩 | 国产精品久久久久久久电影 | 久久国产精品免费视频 | 久久国产精品伦理 | 日日干狠狠干 | 国产精品国产三级国产aⅴ入口 | 自拍视频国产 | 精品国产青草久久久久福利 | 欧美综合视频 | 国产精品久久久久毛片软件 | 久久精品在线观看 | 欧美性猛交xxxx黑人交 | 国产精品久久久久久久久久久久久 | www.av视频在线观看 | 久久午夜精品 | 精品久久久久久 | 免费福利视频一区二区三区 | 亚洲欧美另类在线 | 精品国产乱码一区二区三区 | 亚洲欧洲精品成人久久奇米网 | 久久99久久99 | 国产精品成人一区二区网站软件 | 国产精品久久久久久久久久东京 | 午夜视频免费在线观看 | 欧美日韩精品一区二区三区 | 精品视频在线一区 | 精品一区二区三区中文字幕 | 欧美日韩成人 | 午夜影院在线 | 亚洲一区二区三区四区在线视频 | 成人av电影网站 |