有人能帮上忙吗?
我希望创建一个良好的关系模型来管理权限。
我目前有一个用户表,以及各种其他表,如客户,供应商。
用户需要拥有在客户或供应商中查看、编辑、创建的权限。
我将在EF中使用这些表来决定用户拥有什么访问权限,以及天气是否显示表单等。
我最初的模型是这样的,尽管我认为这是错误的,因为它没有说明任何关于权限的内容。
Users UsersCustomers (包含用户与客户的关系) UsersSuppliers (包含用户与供应商的关系) Customers (客户表) Suppliers (供应商表)。
尽管这是可行的,例如,它将用户与客户联系在一起。这看起来不太对劲。
我在考虑放一个名为Permissions的中间表,它将有一个Id和一个链接user表的UserId。然后,我可以将权限链接到如下所示的表
包含权限和客户之间关系的PermissionsCustomers (代替UsersCustomers)。
我想这是我没有得到最优设计的地方。一旦这种设计是正确的,它还将缺少一个表来分配用户对客户拥有的权限类型,即编辑、创建或仅查看等。
我很乐意听到一些反馈或一个强大的模型的例子,它的功能是这样的。
关于客户,供应商,这些只是两个例子,还会有更多的表格,如deliveryLocation,accountsLedger等。
如果我可以做一个查询,说“显示用户X拥有的所有权限”,那就太好了,目前使用我的设置,我必须分别查询每个中间表。
我将通过一个类似于ORM的实体框架来使用它。
对关系模型的结构有点迷惑。
提前谢谢。
发布于 2011-08-14 21:35:00
考虑到你的客户和供应商数量非常少(总共20家),你不需要一个非常复杂的系统。
我在类似的情况下所做的就是设置了一个具有如下结构的权限表:
角色表将包含:
然后将每个用户实体链接到一个权限表,每个用户具有多个权限。当用户登录时,我通常会选择将他们的所有权限加载到内存列表中,这样用户就会有一个权限列表。权限列表将只包含ObjectId、RoleName和/或RoleId (我倾向于使用rolename以使代码更易于阅读,如下面的示例所示)。
protected bool HasPermission(long ObjectId, string RoleName)
{
//Users in the Administrator role have access to everything in the system.
if (this.IsAdministrator) {
HasPermission = true;
return;
}
foreach (Permission P in Permissions) {
if (P.ObjectID == ObjectID & P.RoleName == Role) {
HasPermission = true;
return;
}
}
return false;
}然后,如果我想知道用户是否有权限访问某事,我会这样做:
if (myUser.HasPermission(CustomerId, "Edit Customer") {
//allow the user to edit the customer
else
//allow the user to only view the customer (for example)或
if (myUser.HasPermission(SupplierId, "Print Supplier") {
//allow the user to print the record
else
//give user a warning关键是,每个“角色”需要是唯一的,你不能有一个通用的“编辑”角色,因为如果你有一个拥有相同id的客户和供应商,而你想看看用户是否有“编辑”的权限,你可能会得到错误的结果。因此有一个名为“编辑客户”的角色和另一个名为“编辑供应商”的角色。
这种解决方案不能很好地扩展imo,但对于只有几十条需要保护的记录的数据库来说,它工作得很好,而且易于实现和维护。它也不是以真正的关系方式设置的,即权限表中的ObjectId既不与供应商表也不与客户表相关。
(此外,在这种情况下,我的用户对象知道它是否是管理员,管理员不需要设置权限,可以访问所有内容,因此不需要搜索权限-节省了几纳秒的时间)
https://stackoverflow.com/questions/7056661
复制相似问题