Har*_*ari 52 permissions database-design web-applications
我正在考虑为"管理"Web应用程序设计权限系统的最佳方法.该应用程序可能有许多用户,每个用户都可以被分配一定的角色; 可以允许其中一些用户执行角色之外的特定任务.
我可以想到两种设计方法:一种是"权限"表,每个用户都有一行,布尔列,每个任务一个,为他们分配执行这些任务的权限.像这样:
User ID Manage Users Manage Products Manage Promotions Manage Orders 1 true true true true 2 false true true true 3 false false false true
我想到的另一种方法是使用位掩码来存储这些用户权限.对于32位有符号整数,这会将可管理的任务数限制为31,但实际上我们不可能有超过31个用户可以执行的特定任务.这样,数据库模式就会更简单,每次添加需要访问控制的新任务时,我们都不必更改表结构.像这样:
User ID Permissions (8-bit mask), would be ints in table 1 00001111 2 00000111 3 00000001
人们通常使用什么机制,为什么?
谢谢!
Luc*_*man 74
我认为远离编码宇宙意义的神秘位串是一般的经验法则.
虽然可能比较笨拙,但是拥有可能的权限表,用户表以及它们之间的链接表是组织它的最佳和最清晰的方法.它还使您的查询和维护(特别是对于新人)更容易.
Lev*_*sol 33
如何创建Permission表,然后是UserPermission表来存储关系?
您永远不必再次修改结构,并且您可以根据需要添加任意数量的权限.
ste*_*yer 24
我已经做到了两个方面.但我不再使用比特面具了.在用户ID或组ID作为外键的情况下,可以将单独的表用作交叉引用.
UserID | Permission
===================
1 | 1 1 representing manage users
1 | 2 2 being manger products
2 | 3
Run Code Online (Sandbox Code Playgroud)
这种方式更容易维护并在以后添加.
我还使用一个单独的表来管理权限.
PermissionID | Description
==========================
1 | Manage Users
2 | Manager Products
Run Code Online (Sandbox Code Playgroud)
通常我有一个Users表,一个Roles表和一个UserRoles表.这样,您可以拥有无限量的角色而无需更改数据库结构,并且用户可以处于多个角色.
我强制应用程序仅授权角色(从不用户).请注意角色表中的"id"列不是标识列.这是因为您可能需要控制放入此表的ID,因为您的应用程序将不得不查找特定的ID.
结构如下所示:
create table Users (
id int identity not null,
loginId varchar(30) not null,
firstName varchar(50) not null,
etc...
)
create table Roles (
id int not null,
name varchar(50) not null
)
create table UserRoles (
userId int not null,
roleId int not null
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43742 次 |
| 最近记录: |