我正在开发一个必须管理权限的应用程序,并且我想出了一个我想要一些反馈的设计。我不确定这是否是发布它的正确位置,但我想我们会看到的。
可以为我的应用程序中的用户分配权限。他们可以拥有个人级别的权限,也可以是组的一部分。因此,我有以下表格(我认为这些名称相对不言自明,但如果需要可以添加更多信息):
- 用户
- 权限
- 用户权限
- 团体
- 用户组
- 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 一起作为安装的一部分插入,不应更改。
这种耦合可以接受吗?我不期望数据会发生变化,但它总是有可能发生变化,我只是想知道在我深入研究之前是否有更好的方法来做事。