0

我正在开发一个必须管理权限的应用程序,并且我想出了一个我想要一些反馈的设计。我不确定这是否是发布它的正确位置,但我想我们会看到的。

可以为我的应用程序中的用户分配权限。他们可以拥有个人级别的权限,也可以是组的一部分。因此,我有以下表格(我认为这些名称相对不言自明,但如果需要可以添加更多信息):

  • 用户
  • 权限
  • 用户权限
  • 团体
  • 用户组
  • User_Group_Permissions

权限表的设计是这样的:

  • id int(权限id,主键)
  • name varchar(255)(权限名称,如“ADMINISTRATION”)
  • description varchar(1000)(权限的简短描述)
  • default_value tinyint(分配给用户的默认值(是/否/从不))

但是,当我检查代码中的权限时,我不想使用“魔术字符串”,所以我在权限表中为权限创建了一个枚举,然后像这样使用它:

public enum EPermission
{
    ADMINISTRATION = 1,
    LOGIN = 2
}

public bool HasPermission(EPermission permission)
{
    int permission_id = (int)permission;
    //look up the permission in the database based on permission_id
}

我的权限表中的 id 与我在枚举中分配的数值相匹配。应用程序无法更改这些。权限表中的权限与这些 ID 一起作为安装的一部分插入,不应更改。

这种耦合可以接受吗?我不期望数据会发生变化,但它总是有可能发生变化,我只是想知道在我深入研究之前是否有更好的方法来做事。

4

3 回答 3

1

是的,这是“可以接受的”并且是相当普遍的做法。

编辑:如果您想真正减少数据库和枚举不同步的可能性,您可以反映枚举以在部署期间为您的表播种数据。

于 2013-08-22T18:18:20.057 回答
1

由于您不更改权限,因此您也可以摆脱权限表并仅使用枚举。然后,您可以将枚举的值作为 int 存储在 User_Permissions 和 User_Group_Permissions 表中。

从数据库中检索数据时,您可以将值反序列化为枚举。这减少了数据库中的数据被损坏并且不再与您的枚举匹配的可能性。

于 2013-08-22T18:25:09.980 回答
0

我怀疑从长远来看它无济于事。如果单个用户可以拥有一个或多个权限,该怎么办。那么你需要切换标志枚举吗?

于 2013-08-22T18:25:28.053 回答