RBAC(Role-Based access Control,基于角色的訪問(wèn)控制),就是用戶通過(guò)角色與權(quán)限進(jìn)行關(guān)聯(lián)。
理解為用戶擁有多個(gè)角色,角色擁有多個(gè)權(quán)限。構(gòu)成了“用 戶-角色-權(quán)限”的授權(quán)模型。并且他們之間的關(guān)系為多對(duì)多。
對(duì)于用戶來(lái)說(shuō),登陸不同的賬號(hào)密碼,所屬的角色不同,可擁有不同的操作。
(寫任何代碼之前先要構(gòu)思我們要做什么,做這件事情,需要哪些最基礎(chǔ)的東西,他們之間的關(guān)系是什么,如何把他們整合在一起。
如果沒(méi)有想好,代碼寫下去會(huì)造成反復(fù)的修改浪費(fèi)了時(shí)間。)
1.首先我們需要3張表 用戶表 角色表 action表,用戶表角色表為多對(duì)多關(guān)系,角色表與action表為多對(duì)多關(guān)系。所以需要2張關(guān)系表,
即user_role 和role_action,用的知識(shí)為hibernate多對(duì)多表關(guān)聯(lián),下面貼下代碼。
首先是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的外鍵

簡(jiǎn)單說(shuō)明下 menu_id映射了menu表role_id映射了role表
下面是user_role表

user_role的外鍵

同上不在解釋;
只要懂得hibernate的多對(duì)多關(guān)系,上面的建表會(huì)非常簡(jiǎn)單。
通過(guò)以上的5張表,我們可以從用戶表獲取關(guān)聯(lián)的角色,然后通過(guò)角色表獲取關(guān)聯(lián)的action。反之亦然。
表建立完成,下面我們進(jìn)行基礎(chǔ)數(shù)據(jù)實(shí)現(xiàn)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注