我正在开发一个必须管理权限的应用程序,我想出了一些我想要一些反馈的设计。我不确定这是否是发布它的正确位置,但我想我们会看到。
可以为我的应用程序中的用户分配权限。他们可以拥有个人级别的权限,也可以拥有组的权限。因此,我有以下表格(我认为名称相对不言自明,但如果需要可以添加更多信息):
权限表的设计是这样的:
但是,当我在代码中检查权限时,我不想使用“Magic String”,所以我在权限表中为权限创建了一个枚举,然后像这样使用它:
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一起插入,不应更改。
这种耦合是否可以接受?我并不期望数据能够改变,但它总是可能的,而且我只是想知道在我深入研究之前是否有更好的方法可以做到。
答案 0 :(得分:1)
是的,它是“可接受的”并且是一种相当普遍的做法。
编辑:如果你想真正减少你的数据库和枚举不同步的可能性,你可以反映枚举在部署期间用数据为你的表种子。
答案 1 :(得分:1)
由于您不更改权限,您也可以离开权限表并仅使用枚举。然后,您可以将枚举的值作为int存储在User_Permissions和User_Group_Permissions表中。
从数据库中检索数据时,您可以将值反序列化为枚举。这样可以降低数据库中的数据损坏并且与枚举不匹配的可能性。
答案 2 :(得分:0)
我怀疑这对长远来说无济于事。什么如果单个用户可以拥有一个或多个权限。那你需要切换标志枚举吗?