重大改版
 鱼翔空 2013-06-19 技术总结|   0 795 
文章评分 90 次,平均分 5.0

二十四:权限设计相关

   *  每个权限的标识码都是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);
  }



 

除特别注明外,本站所有文章均为我要编程原创,转载请注明出处来自http://5ycode.com/article/226.html

关于
该用户很懒!
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享