天天看点

RBAC的数据库建立

一、数据库,参照网上一些范例,在mysql中创建以下表

Java 代码

  1. -- Create the datatable named by  'RBAC_User'  to save users.  
  2. create table RBAC_User  
  3. (  
  4.  User_ID int  primary key auto_increment,  
  5.  User_Name varchar(20 ) not  null ,  
  6.  User_PassWord varchar(20 ) not  null ,  
  7.  User_Lock bit not null   
  8. );  
  9. CREATE UNIQUE INDEX IDX_User ON  RBAC_User(User_Name) ;  
  10. -- Create the datatable named by 'RBAC_Group'  to save groups.  
  11. create table RBAC_Group  
  12. (  
  13.  Group_ID int  primary key auto_increment,  
  14.  Group_Name varchar(20 ) not  null ,  
  15.  Group_Description varchar(100 )  
  16. );  
  17. CREATE UNIQUE INDEX IDX_Group ON  RBAC_Group(Group_Name) ;  
  18. -- Create the datatable named by 'RBAC_Role'  to save roles.  
  19. create table RBAC_Role  
  20. (  
  21.  Role_ID int  primary key auto_increment,  
  22.  Role_Name varchar(20 ) not  null ,  
  23.  Role_Description varchar(100 )  
  24. );  
  25. CREATE UNIQUE INDEX IDX_Role ON  RBAC_Role(Role_Name) ;  
  26. -- Create the datatable named by 'RBAC_Resource'  to save Resources.  
  27. create table RBAC_Resource  
  28. (  
  29.  Resource_ID int  primary key auto_increment,  
  30.  Resource_Name varchar(20 ) not  null ,  
  31.  Resource_Description varchar(100 )  
  32. );  
  33. CREATE UNIQUE INDEX IDX_Resource ON  RBAC_Resource(Resource_Name) ;  
  34. -- Create the datatable named by 'RBAC_Operation'  to save Operations.  
  35. create table RBAC_Operation  
  36. (  
  37.  Operation_ID int  primary key auto_increment,  
  38.  Operation_Name varchar(10 ) not  null ,  
  39.  Operation_Description varchar(100 )  
  40. );  
  41. CREATE UNIQUE INDEX IDX_Operation ON RBAC_Operation (Operation_Name);  
  42.  --Create the datatable named by 'RBAC_UserGroup'  to save userGroup.  
  43. create table RBAC_User_Group   
  44. (  
  45.  User_Group_ID int  primary key auto_increment,  
  46.  User_ID int  not  null ,  
  47.  Group_ID int  not  null ,  
  48.  constraint foreign key(User_ID) references RBAC_User(User_ID) ,  
  49.  constraint foreign key(Group_ID) references RBAC_Group(Group_ID)  
  50. );  
  51. CREATE UNIQUE INDEX IDX_User_Group ON RBAC_User_Group ( User_ID , Group_ID);  
  52. -- Create the datatable named by 'RBAC_GroupRole'  to save GroupRoles.  
  53. create table RBAC_Group_Role  
  54. (  
  55.  Group_Role_ID int  primary key auto_increment,  
  56.  Group_ID int  not  null ,  
  57.  Role_ID int  not  null ,  
  58.  constraint foreign key(Group_ID) references RBAC_Group(Group_ID) ,  
  59.  constraint foreign key(Role_ID) references RBAC_Role(Role_ID)   
  60. );  
  61. CREATE UNIQUE INDEX IDX_Group_Role ON RBAC_Group_Role(  Group_ID, Role_ID);  
  62. -- Create the datatable named by RBAC_Authority to save authorities.  
  63. create table RBAC_Authority  
  64. (  
  65.  Authority_ID int  primary key auto_increment,  
  66.  Resource_ID int  not  null ,  
  67.  Operation_ID int  not  null ,  
  68.  constraint foreign key(Resource_ID) references RBAC_Resource(Resource_ID) ,  
  69.  constraint foreign key(Operation_ID) references RBAC_Operation(Operation_ID)   
  70. );  
  71. CREATE UNIQUE INDEX IDX_Authority ON RBAC_Authority (Resource_ID, Operation_ID);  
  72. -- Create the datatable named by RBAC_Permission to save permissions.  
  73. create table RBAC_Permission  
  74. (  
  75.  Permission_ID int  primary key auto_increment,  
  76.  Role_ID int  not  null ,  
  77.  Authority_ID int  not  null ,  
  78.  constraint foreign key(Role_ID) references RBAC_Role(Role_ID) ,  
  79.  constraint foreign key(Authority_ID) references RBAC_Authority(Authority_ID)   
  80. );  
  81. CREATE UNIQUE INDEX IDX_Permission ON RBAC_Permission (Role_ID, Authority_ID);  
-- Create the datatable named by 'RBAC_User' to save users.
create table RBAC_User
(

 User_ID int primary key auto_increment,
 
 User_Name varchar(20) not null,
 
 User_PassWord varchar(20) not null,
 
 User_Lock bit not null
);

CREATE UNIQUE INDEX IDX_User ON  RBAC_User(User_Name) ;

-- Create the datatable named by 'RBAC_Group' to save groups.
create table RBAC_Group
(
 
 Group_ID int primary key auto_increment,
 
 Group_Name varchar(20) not null,
 
 Group_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Group ON  RBAC_Group(Group_Name) ;

-- Create the datatable named by 'RBAC_Role' to save roles.
create table RBAC_Role
(

 Role_ID int primary key auto_increment,

 Role_Name varchar(20) not null,

 Role_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Role ON  RBAC_Role(Role_Name) ;

-- Create the datatable named by 'RBAC_Resource' to save Resources.
create table RBAC_Resource
(

 Resource_ID int primary key auto_increment,

 Resource_Name varchar(20) not null,

 Resource_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Resource ON  RBAC_Resource(Resource_Name) ;

-- Create the datatable named by 'RBAC_Operation' to save Operations.
create table RBAC_Operation
(

 Operation_ID int primary key auto_increment,

 Operation_Name varchar(10) not null,

 Operation_Description varchar(100)
);

CREATE UNIQUE INDEX IDX_Operation ON RBAC_Operation (Operation_Name);

 --Create the datatable named by 'RBAC_UserGroup' to save userGroup.
create table RBAC_User_Group 
(

 User_Group_ID int primary key auto_increment,

 User_ID int not null,

 Group_ID int not null,

 constraint foreign key(User_ID) references RBAC_User(User_ID) ,

 constraint foreign key(Group_ID) references RBAC_Group(Group_ID)
);

CREATE UNIQUE INDEX IDX_User_Group ON RBAC_User_Group ( User_ID , Group_ID);

-- Create the datatable named by 'RBAC_GroupRole' to save GroupRoles.
create table RBAC_Group_Role
(

 Group_Role_ID int primary key auto_increment,

 Group_ID int not null,

 Role_ID int not null,

 constraint foreign key(Group_ID) references RBAC_Group(Group_ID) ,

 constraint foreign key(Role_ID) references RBAC_Role(Role_ID) 
);

CREATE UNIQUE INDEX IDX_Group_Role ON RBAC_Group_Role(  Group_ID, Role_ID);

-- Create the datatable named by RBAC_Authority to save authorities.
create table RBAC_Authority
(

 Authority_ID int primary key auto_increment,

 Resource_ID int not null,

 Operation_ID int not null,

 constraint foreign key(Resource_ID) references RBAC_Resource(Resource_ID) ,

 constraint foreign key(Operation_ID) references RBAC_Operation(Operation_ID) 
);

CREATE UNIQUE INDEX IDX_Authority ON RBAC_Authority (Resource_ID, Operation_ID);

-- Create the datatable named by RBAC_Permission to save permissions.
create table RBAC_Permission
(

 Permission_ID int primary key auto_increment,

 Role_ID int not null,

 Authority_ID int not null,

 constraint foreign key(Role_ID) references RBAC_Role(Role_ID) ,

 constraint foreign key(Authority_ID) references RBAC_Authority(Authority_ID) 
);

CREATE UNIQUE INDEX IDX_Permission ON RBAC_Permission (Role_ID, Authority_ID);

           

二、用myEclipse生成pojo、dao后,对hbm.xml的配置部分修改,绕过只起关联关系的表,改为把两个一对多改为一个多对多。

Java 代码

  1. //RbacGroup.hbm.xml   
  2.          <set name="rbacUsers"  table= "rbac_user_group"  inverse= "true"  lazy= "true"  cascade= "save-update" >  
  3.             <key>  
  4.                 <column name="Group_ID"  not- null = "true"  />  
  5.             </key>  
  6.             <many-to-many class = "dao.rbac.RbacGroup"  column= "User_ID"  />  
  7.         </set>  
  8.         <set name="rbacRoles"  table= "rbac_group_role"  inverse= "true"  lazy= "true"  cascade= "save-update" >  
  9.             <key>  
  10.                 <column name="Group_ID"  not- null = "true"  />  
  11.             </key>  
  12.             <many-to-many class = "dao.rbac.RbacGroup"  column= "Role_ID"  />  
  13.         </set>  
  14. //RbacUser.hbm.xml   
  15.          <set name="rbacGroups"   table= "rbac_user_group"  inverse= "false"  lazy= "true"  cascade= "save-update" >  
  16.             <key>  
  17.                 <column name="User_ID"  not- null = "true"  />  
  18.             </key>  
  19.             <many-to-many class = "dao.rbac.RbacUser"  column= "Group_ID"  />  
  20.         </set>  
  21. //RbacRole.hbm.xml   
  22.          <set name="rbacGroups"  table= "rbac_group_role"  inverse= "false"  lazy= "true"  cascade= "save-update" >  
  23.             <key>  
  24.                 <column name="Role_ID"  not- null = "true"  />  
  25.             </key>  
  26.             <many-to-many class = "dao.rbac.RbacRole"  column= "Group_ID"  />  
  27.         </set>  
//RbacGroup.hbm.xml
         <set name="rbacUsers" table="rbac_user_group" inverse="true" lazy="true" cascade="save-update">
            <key>
                <column name="Group_ID" not-null="true" />
            </key>
            <many-to-many class="dao.rbac.RbacGroup" column="User_ID" />
        </set>
        <set name="rbacRoles" table="rbac_group_role" inverse="true" lazy="true" cascade="save-update">
            <key>
                <column name="Group_ID" not-null="true" />
            </key>
            <many-to-many class="dao.rbac.RbacGroup" column="Role_ID" />
        </set>
//RbacUser.hbm.xml
         <set name="rbacGroups"  table="rbac_user_group" inverse="false" lazy="true" cascade="save-update">
            <key>
                <column name="User_ID" not-null="true" />
            </key>
            <many-to-many class="dao.rbac.RbacUser" column="Group_ID" />
        </set>

//RbacRole.hbm.xml
         <set name="rbacGroups" table="rbac_group_role" inverse="false" lazy="true" cascade="save-update">
            <key>
                <column name="Role_ID" not-null="true" />
            </key>
            <many-to-many class="dao.rbac.RbacRole" column="Group_ID" />
        </set>
           

三、pojo中集合属性的修改,和以上配置保持一致,略...