C# 如何在C代码上引用域表的数据库注册表?
我的问题是: 我在数据库中有一个域表,我在其中为用户添加了一些规则 大概是这样的:C# 如何在C代码上引用域表的数据库注册表?,c#,design-patterns,database-design,C#,Design Patterns,Database Design,我的问题是: 我在数据库中有一个域表,我在其中为用户添加了一些规则 大概是这样的: bool HasPermissionToEdit = Rules.UserHasPermisson(UserName, UserRoles.CanEditClient) if(HasPermissionToEdit) { //Do the work! } 表用户角色: idRule cRuleDescription bRuleIsActive 1 Edit client true 2 D
bool HasPermissionToEdit = Rules.UserHasPermisson(UserName, UserRoles.CanEditClient)
if(HasPermissionToEdit)
{
//Do the work!
}
表用户角色:
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!
}
但是使用这个会给我带来一些麻烦。有人在数据库的生产环境中创建了新行。身份证也不正确了。我需要更改C代码的枚举。我需要使用此表,因为管理用户可以管理其他用户组的规则
你是如何使用它的?有更好的方法来引用表上的注册表吗?只要规则ID不是自动生成的(即不是标识列),使用规则ID映射到枚举本身就不疯狂。只要规则ID不是自动生成的,使用规则ID映射到枚举本身就不疯狂(即,不是一个标识列)。如果要正确执行此操作,请使密钥包含角色的名称。这样,就不会出现ID意外,因为有人认为密钥没有意义。将其命名为idRule没有帮助 其次,添加检查约束以强制正确使用角色名称 第三,在角色名称上添加唯一的键约束,以强制每个角色只出现一次 如果愿意,可以使用字符串枚举将角色名转换为整数。有关良好的设计模式,请参阅 示例表: ID-名称-描述-处于活动状态
1-CanEditClient-client-true
2-CanDeleteClient-client-false
3-CanChangeClientName-客户端-真
然后确保为名称添加唯一约束,并同时添加检查约束
现在,无论有人如何洗牌ID,您的代码都将继续工作。如果您想正确实现这一点,请使密钥包含角色的名称。这样,就不会出现ID意外,因为有人认为密钥没有意义。将其命名为idRule没有帮助 其次,添加检查约束以强制正确使用角色名称 第三,在角色名称上添加唯一的键约束,以强制每个角色只出现一次 如果愿意,可以使用字符串枚举将角色名转换为整数。有关良好的设计模式,请参阅 示例表: ID-名称-描述-处于活动状态
1-CanEditClient-client-true
2-CanDeleteClient-client-false
3-CanChangeClientName-客户端-真
然后确保为名称添加唯一约束,并同时添加检查约束
现在,不管有人如何洗牌ID,你的代码都会继续工作。是的。我看到很多开发人员都在这么做。我就是其中之一。但我认为这不安全。因为有人可以更改数据库,映射会出错。但我看不到其他方法来实现这一点。你总是必须映射到某个东西,它可能就是它可能的IDt是描述或另一个字符串字段。在动态系统(DB)中有一段数据,在静态系统(代码)中有一段数据这一事实上,您总是会遇到问题.Mapping to a integer field是整洁的,因为您可以将该字段强制转换为枚举。是的。我看到很多开发人员都这么做。我就是其中之一。但我认为这不安全。因为有人可以更改数据库,映射将出错。但我看不到其他方法来完成此操作。您将始终必须映射到某个对象,它可能是ID是描述字段还是另一个字符串字段。动态系统(DB)中有一段数据,静态系统(代码)中有一段数据这一事实总是会有问题的。映射到整数字段是整齐的,因为您可以将字段强制转换为枚举。