如何在C#代码中引用域表的数据库注册表



我的问题是:

我在数据库中有一个域表,在其中我为用户添加了一些规则。

类似这样的东西:

表用户角色:

idRule cRuleDescription bRuleIsActive
1   Edit client      true
2   Delete client    false

我的C#应用程序使用枚举引用这个表,如下所示:

public enum UserRoles: int
{
    CanEditClient = 1,
    CanDeleteClient = 2,
    CanChangeClientName = 3,
    //More code
}

我使用了一个C#方法,根据数据库的Id查询数据库,以了解记录的用户是否有权限执行某些操作。类似这样的东西:

bool HasPermissionToEdit = Rules.UserHasPermisson(UserName, UserRoles.CanEditClient)
if(HasPermissionToEdit)
{
  //Do the work!
}

但是使用这个会给我带来一些麻烦。有人在数据库的生产设备中创建了新行。ID不再正确。我需要更改C#代码上的枚举。我需要使用这个表,因为管理用户可以管理其他用户组的规则。

你是如何使用它的?有更好的方法引用表上的注册表吗?

如果您想正确实现这一点,请使键包含角色的名称。这样一来,就不会出现有人认为钥匙毫无意义的身份证事故。将其命名为idRule没有帮助。

其次,添加一个检查约束来强制正确使用角色名称。

第三,在角色的名称上添加一个唯一的键约束,以强制每个角色只出现一次。

如果你愿意,你可以使用字符串枚举将角色名称转换为整数。请参阅C#字符串枚举以获得一个不错的设计模式。

示例表:

ID-名称-说明-IS_ACTIVE
1-CanEditClient-client-true
2-CanDeleteClient-client-false
3-CanChangeClientName-client-true

然后确保向NAME添加一个唯一约束,并添加一个检查约束。

现在,无论有人如何篡改ID,您的代码都将继续工作。

使用规则ID映射到枚举本身并不疯狂,只要规则ID不是自动生成的(即不是identiy列)。

最新更新