单用户多角色权限的MSSQL实现

简介: 本文转载:http://www.cnblogs.com/tonyqus/archive/2005/08/22/218271.html 数据表设计分为用户表、角色表、角色拥有权限表、权限表、用户所属角色表表名:Users(用户表)字段类型长度说明IDint自动编号,主...

本文转载:http://www.cnblogs.com/tonyqus/archive/2005/08/22/218271.html

 

数据表设计
分为用户表、角色表、角色拥有权限表、权限表、用户所属角色表

表名:Users(用户表)
字段 类型 长度 说明
ID int 自动编号,主键
UserName varchar 20
Password varchar 20

表名:Roles(角色表)
字段 类型 长度 说明
ID int 自动编号,主键
Name varchar 50

表名:UsersRoles(用户所属角色表)
字段 类型 长度 说明
ID int 自动编号,主键
UserID int 对Users.ID做外键
RoleID int 对Roles.ID做外键

表名:Permissions(权限表)
字段 类型 长度 说明
ID int 自动编号,主键
Name varchar 50 权限的名称

表名:RolesPermissions(角色权限表)
字段 类型 长度 说明
ID int 自动编号,主键
RoleID int 对Roles.ID做外键
PermissionID int 对Permissions.ID做外键
Allowed small int 该权限是否被允许


完成后的关系图如下所示:


以下的存储过程用于检查用户@UserName是否拥有名称为@Permission的权限
CREATE Procedure CheckPermission
(
    @UserName    varchar(20),
    @Permission    varchar(50)
)
AS
SELECT MIN(Allowed) FROM RolesPermissions
    INNER JOIN Permissions ON Permissions.ID = PermissionID
    INNER JOIN Roles ON Roles.ID = RoleID
    INNER JOIN UsersRoles ON UsersRoles.ID = Roles.ID
    INNER JOIN Users ON Users.ID = UsersRoles.UserID
WHERE Users.UserName=@UserName AND Permissions.Name=@Permission

单用户多角色权限的原理
假设用户A现在同时有两个角色Programmer和Contractor的权限

Permission名称 角色Programmer权限 角色Contractor权限 组合后权限
查看文件 允许(Allowed=1) 允许(Allowed=1) 允许
编辑文件 允许(Allowed=1) 不允许(Allowed=0) 不允许
上传图片 允许(Allowed=1) 没有此权限的记录 允许
目录
相关文章
|
5月前
|
安全 关系型数据库 MySQL
MySQL权限管理大揭秘:用户、组、权限解析
MySQL权限管理大揭秘:用户、组、权限解析
675 0
|
6月前
|
canal
MySQL8.0创建新用户并授权
MySQL8.0创建新用户并授权
86 1
MySQL8.0创建新用户并授权
|
存储 关系型数据库 MySQL
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
Mysql 用户管理(创建、删除、改密、授予权限、取消权限)
567 0
|
关系型数据库 MySQL 数据库
mysql数据库添加新用户,并授予所有权限
mysql数据库添加新用户,并授予所有权限
126 0
|
关系型数据库 数据库 数据安全/隐私保护
PG 用户(角色)操作
用户(角色)操作
139 0
|
Shell Linux 数据安全/隐私保护
Linux系统配置(账号和权限)
管理用户账号和组账号、用户账号管理、组账号管理、查询账号信息、管理目录和文件、属性、权限
199 0
|
Linux 数据安全/隐私保护
linux服务器创建用户、授权操作
linux服务器创建用户、授权操作、创建用户组、授权可读写权限
519 0
|
存储 关系型数据库 MySQL
MySQL 查看用户授予的权限
在MySQL中,如何查看一个用户被授予了那些权限呢? 授予用户的权限可能分全局层级权限、数据库层级权限、表层级别权限、列层级别权限、子程序层级权限。具体分类如下:     全局层级   全局权限适用于一个给定服务器中的所有数据库。
2149 0
|
MySQL 关系型数据库 数据库