权限设计

一、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里找到该用户所属组的权限+该用户所拥有角色的权限+自身的权限

  

原文地址:https://www.cnblogs.com/shengyu-kmust/p/4519318.html