一、RBAC模型的权限设计(基于角色的访问控制(Role-Based Access Control))
参考资料
扩展RBAC用户角色权限设计方案
自己参考项目经验和网络资料总结出来的,权限管理源代码参考项目StudyNoteOfCsharp,该项目在完成后我会传到GITHUB上。
--拥有权限的对象表集 create table [user]--用户,用户包括了角色 ( [user_id] int identity(1,1) primary key, name varchar(20) ) create table role--角色 ( role_id int identity(1,1) primary key, name varchar(20) ) create table [group]--组,组包括了用户 ( group_id int identity(1,1) primary key, name varchar(20) ) create table user_role--用户所拥有角色表,多对多关系 ( [user_id] int foreign key references [user]([user_id]), role_id int foreign key references [role]([role_id]) ) create user_group--用户所属组表,多对多关系 ( [user_id] int foreign key references [user]([user_id]), role_id int foreign key references [group]([group_id]) ) ----需要用权限来管理的对象,如果菜单,功能,等 create table menu(--菜单,是否有权限访问或是看到菜单 id int identity(1,1) primary key,--自增加 parent_id int,---父菜单 name varchar(50),--菜单名 form_url varchar(100),---窗体地址 sort int,--排序号 ) --功能操作表,如在一个菜单下的调出来的界面上有多个功能操作,只允许某部分功能的权限 create table operation ( id int identity(1,1) primary key,--功能id parent_id int,--父功能id name varchar(100),--功能操作名字 ) --权限表,注册各资源、操作、菜单的权限 create table authority ( id int identity(1,1) primary key,--权限id [type] varchar(20),---权限类型,如菜单权限,功能操作权限,建议用表名的字符串做为值 re_id int,---对应用menu或是operation的id号 ) --对象权限表,管理人员、角色、组的权限 create table object_authority ( object_type varchar(10),---如对应user,role,group,建议用表名的字符串做为值 [object_id] int ,---对象user,role,group的id authority_id int,--对应authority的id ) --要查看一个人的权限:从object_authority里找到该用户所属组的权限+该用户所拥有角色的权限+自身的权限