二十四:权限设计相关
* 每个权限的标识码都是1<<n,如果接受权限码的是int类型,只能1<<31次,如果是long类型的话,最多只能1<<62
这样的缺陷就限制了权限的数量了,
1==0001<<1=0010
1==0001&0010=0 &是相乘
1|2 0001 | 0010 =3 |是相加
这个时候,我们可以使用分组来管理,一组固定多少个,然后这一组满了以后,我们再将标识码重新生成,最后比对的时候就是
分组的索引+权限的标识码,这样才可以确保权限的唯一性
Right表设计
private int id; 权限id
private String RightName;权限名
private String url;权限对应的url
private int pos;权限组
private Long code;权限标识码
权限的标志就变成了
Long posCodeArr[] ;
postCodeArr的角标对应了权限组
postCodeArr[0]对应当前权限组中拥有所有权限的总和
二十五: 手动添加权限话的,有些url会写错,而且也不确定会有哪些url,
在生产环境中,我们可以使用一个自定义的拦截器,使用拦截器将获取到的url全部添加到数据库中
我们只需要修改下,操作的名称即可,哪些角色需要哪些权限,我们,可以在角色中给定
invocation中已经封转好了了url,我们只需要获取代理对象,在代理中,我们都可以
将命名空间(namespace)在拼接的时候,我们需要注意格式
/namespace/actionName
要操作数据库就需要在拦截器中得到service中的服务
而在启动tomcat的时候,spring的监听器,已经将容器中的内容都放到了application中了
ServletContext sc = ServletActionContext.getServletContext();
//取得application范围中spring的容器
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sc);
取到spring的容器以后,我们就可以获取容器中的内容了
二十六:批量更新权限的名称
a, 将text元素的name按照一定的规则命名,规则中加上id,比如:r_id
在后台,我们使action实现参数关注对象接口ParameterAware
然后,我们在action的方法中遍历,将所有的name以r开头的都取出来
将对应的id和text元素的value放入到一个map中
然后将map中的数据都遍历更新数据库
b, 我们可以在action中定义个List<Right> allRights的集合
我们在page页面中迭代的时候使用强行ognl表达式,是属性链的使用
<td><s:textfield name="%{'allRights[' + #st.index + '].id'}" cssClass="text" cssStyle="width:50px"/></td> <td> <s:textfield name="%{'allRights[' + #st.index + '].rightName'}" cssClass="text" cssStyle="width:100px"/> </td>
后台获取到的allRights中,只有id和rightName这两个属性的集合
我们只要将这个集合遍历更新了数据库就可以
二十七:抽取实体中的共性的属性,比如id,定义成抽象的,继承以后,可以直接覆盖
public abstract class baseDomain{ public abstract Integer getId(); public abstract void setId(Integer id); } // 当实体继承了该抽象类以后,直接实现了getId()和setId的方法,相当于覆盖了baseDomain中的id属性 public class User extends baseDomain{ private Integer id; public Integer getId(){ return this.id; } public void setId(Integer id){ this.id=id; } } //我们可以做一个工具,将所有继承baseDomain的类的id抽取出来 public static String extrantids(Set<? extends baseDomain> domains){ String ids=""; for(Iterator<BaseDomain> it=((Iterator<BaseDomain>) domains.iterator());it.hasNext();){ BaseDomain domain = it.next(); ids+=domain.getId()+","; } return ids.substring(0, ids.length()-1); }
文章评论