你的位置:首页 > Java教程

[Java教程]ssh整合easyui的权限设计


RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。

理解为用户拥有多个角色,角色拥有多个权限。构成了“用 户-角色-权限”的授权模型。并且他们之间的关系为多对多。

对于用户来说,登陆不同的账号密码,所属的角色不同,可拥有不同的操作。

(写任何代码之前先要构思我们要做什么,做这件事情,需要哪些最基础的东西,他们之间的关系是什么,如何把他们整合在一起。

如果没有想好,代码写下去会造成反复的修改浪费了时间。)

1.首先我们需要3张表  用户表 角色表 action表,用户表角色表为多对多关系,角色表与action表为多对多关系。所以需要2张关系表,

即user_role 和role_action,用的知识为hibernate多对多表关联,下面贴下代码。

首先是T_user类

  private String id;  private String name;  private String age;  private String sex;  private Set<T_role> role =new HashSet<>();  private String t_name;    private String t_password;       @ManyToMany(fetch=FetchType.EAGER)   @JoinTable(       name="user_role",       joinColumns=@JoinColumn(name="user_id",referencedColumnName="id"),       inverseJoinColumns=@JoinColumn(name="role_id",referencedColumnName="id")       )   public Set<T_role> getRole() {     return role;   }      public void setRole(Set<T_role> role) {     this.role = role;   }//其他的set get省略

T_role类

    private String id;  private String name;  private Set<T_user> user =new HashSet<>();  private Set<Menu> menu =new HashSet<>();  public T_role() {  }      @ManyToMany(fetch=FetchType.EAGER)   @JoinTable(name="user_role",    joinColumns=@JoinColumn(name="role_id",referencedColumnName="id"),    inverseJoinColumns=@JoinColumn(name="user_id",referencedColumnName="id"))        public Set<T_user> getUser() {    return user;  }  public void setUser(Set<T_user> user) {    this.user = user;  }     @ManyToMany(fetch=FetchType.EAGER)   @JoinTable(name="role_menu",    joinColumns=@JoinColumn(name="role_id",referencedColumnName="id"),    inverseJoinColumns=@JoinColumn(name="menu_id",referencedColumnName="id"))        public Set<Menu> getMenu() {    return menu;  }  public void setMenu(Set<Menu> menu) {    this.menu = menu;  }

 

 

Menu类(即action类)

  private String id;  private String name;  private String icon;  private String url;  private String __parentId;    private String type;  private Set<T_role> role =new HashSet<>();   @ManyToMany(fetch=FetchType.EAGER)   @JoinTable(name="role_menu",    joinColumns=@JoinColumn(name="menu_id",referencedColumnName="id"),    inverseJoinColumns=@JoinColumn(name="role_id",referencedColumnName="id"))  public Set<T_role> getRole() {    return role;  }  public void setRole(Set<T_role> role) {    this.role = role;  }//其他setget省略

下面是连接表

role_menu

role_menu的外键

简单说明下 menu_id映射了menu表role_id映射了role表

下面是user_role表

user_role的外键

同上不在解释;

只要懂得hibernate的多对多关系,上面的建表会非常简单。

通过以上的5张表,我们可以从用户表获取关联的角色,然后通过角色表获取关联的action。反之亦然。

表建立完成,下面我们进行基础数据实现。