精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-06-28
最后修改:2010-07-06
上篇,所说为什么要用Stringbuffer的拼接来存储权限集合,而不用List或者Map集合 对于List或者Map List接口是对Collection进行了简单的扩充,它的泛化类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,存储对象会其元素顺序是按照加入顺序排列的,当如果循环存储,或者删除,都会进行排序,将对遍历的所有对象开辟N个空间,消耗占内存.Map是键值对是以哈希表的方式存储没有排序.但也消耗内存.具体的就不多讲了. Stringbuffer 和string的拼接 又有性能上的差异,String 虽然是final类,String是原型类型,类似基本类型,就是说, 对他的修改都会创建一个新的对象,例如String s ="abc"; 修改String s="abc"+"c" 对象"abc" 与"abc"+"c"不是同一个对象,String字符串的拼接一般会重复创建string对象,StringBuffer与StringBuilder这两个类是为字符串设计的,后者是一个线程安全的类, 设计这两个类就是解决string反复创建新对象的问题,为什么StringBuffer一般效率高于String,是因为StringBuffer是一个Buffer,有一个字符缓冲数组,默认分配16个字符. 所以选用StringBuffer来存储权限集合对象.
package com.linktel.linkFax.web.zk.util; import java.util.List; import org.zkoss.zkplus.spring.SpringUtil; import com.linktel.linkFax.LinkFaxContext; import com.linktel.linkFax.domain.Authority; import com.linktel.linkFax.domain.Resource; import com.linktel.linkFax.domain.Role; import com.linktel.linkFax.domain.User; import com.linktel.linkFax.service.ResourceService; public class AuthorityTools { /** * 通过资源名称查找功能权限 与登录用户所属角色所拥有的权限对比, 如果功能权限被授权的话返回授权; * * @param resourceName * 功能资源名称; * @return */ public static boolean hasPermission(String resourceName) { StringBuffer authoritiesStr=(StringBuffer ) ZkUtils.getSessionAttr(LinkFaxContext.CURRENT_AUTHORITIESSTR); ResourceService service = (ResourceService) SpringUtil .getBean("resourceService"); Resource resource = service.getResourceByValue(resourceName); List<Authority> authoritiesResource = resource.getAuths(); for (Authority authority : authoritiesResource) { int index = authoritiesStr.indexOf(authority.getName()); if (index >= 0) { return Boolean.TRUE; } } return Boolean.FALSE; } }
以上内容是自己写了一个可重用的工具类,这个工具类是针对于循环遍历所操作的resource资源来验证当前登录的用户是否是有权限,如有权限就返回true 如没有就返回false
具体实现是这样的 之前我们把所有角色的权限放入了StringBuffer中 现在我们只要通过当前用户操作的resource资源 中的所包含的权限名称去比对角色中的权限名称 authoritiesStr.indexOf(authority.getName());
接下来就是在页面初始化的时候去绑定后台类对象
<?xml version="1.0" encoding="utf-8"?> <?page id="userPage"?> <?xel-method prefix="c" name="hasPermission" class="com.linktel.linkFax.web.zk.util.AuthorityTools" signature="com.linktel.linkFax.web.zk.util.AuthorityTools hasPermission(java.lang.String)"?> <?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" root="./userWin"?> <window id="userWin" width="100%"> <div if="${c:hasPermission('CompanyUser')}"> <label value="按公司条件查询:"></label> <combobox id="cbxCompany" model="@{userWin.companyList}" selectedItem="@{userWin.company}" readonly="true"> <comboitem self="@{each=company}" label="@{company.name}"></comboitem> </combobox> </div> <separator width="260px" bar="true"></separator> <div if="${c:hasPermission('DeptUser')}"> <label value="按部门条件查询:"></label> <combobox id="cbxDept" model="@{userWin.deptList}" readonly="true" selectedItem="@{userWin.dept}"> <comboitem self="@{each=dept}" label="@{dept.name}"></comboitem> </combobox> </div> </window>
<?xel-method prefix="c" name="hasPermission" class="com.linktel.linkFax.web.zk.util.AuthorityTools" signature="com.linktel.linkFax.web.zk.util.AuthorityTools hasPermission(java.lang.String)"?> 绑定后台类的指令
<div if="${c:hasPermission('CompanyUser')}"> if(${c:hasPermission('资源名称')}) 如果之前后台方法返回的是true 那么在加载的时候组件被创建,如果是false就 不被创建
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 1941 次