我正在设计一个Web应用程序,作为创建数据库的第一步。现在非常基本的表Role
,需要通过数据库进行管理。该表将保留:
RoleID (Identity and Primary Key)
RoleName (Varchar)
现在在应用程序中,如果我需要检查“Admin”角色,启用其中一个按钮,否则禁用它。那么如何编写代码而不用硬编码“Admin”作为角色?
在这种情况下,将Master数据存储在数据库中并在应用程序中引用它可能是一个好的设计吗?
我之前用enum
做过但似乎不太可维护,因为如果我在数据库中添加新角色,那么我还需要更改代码中的enum
,例如。
public enum Role
{
Admin=1,
Normal=2
}
答案 0 :(得分:1)
最简单的解决方案是扩展您的表结构:
RoleID INT
RoleName NVARCHAR
IsAdmin BIT
或者您可以使用user1795177创建分配给每个角色的特殊权限的方法。
请在SQL Server中使用NVARCHAR
代替VARCHAR
来支持unicode。
答案 1 :(得分:0)
创建权限表会更好。 但简单的方法就是添加一个字段'
PermissionType int
然后您可以为不同的角色分配权限
答案 2 :(得分:0)
您的按钮不需要检查角色,而是检查权限。 例如:如果你的页面允许查看/修改/添加/删除项目,那么你将有4个权限
public enum Permission
{
View = 1
Modify = 2
Add = 4
Delete = 5
}
在数据库中,您将拥有一个Role表,指示他们拥有哪个权限。
管理员可以查看/修改/添加/删除 普通可以查看/修改
然后根据当前角色的权限设置“添加”按钮状态。这样您就不需要关心存在多少角色。为了更进一步,每个权限可以附加到实体。
ex:Normal可以在Clients实体上添加/修改/查看,但不能在Invoice实体上添加/修改/查看。