创建/删除角色时,我不想修改代码。
if (HttpContext.Current.User.IsInRole("Super Admin") ||
HttpContext.Current.User.IsInRole("Admin") ||
HttpContext.Current.User.IsInRole("Support"))
{
if (HttpContext.Current.User.IsInRole("Admin"))
{
ListBox1.DataSource = Roles.GetAllRoles().Except(
new[] { "Super Admin" });
}
if (HttpContext.Current.User.IsInRole("Support"))
{
ListBox1.DataSource = Roles.GetAllRoles().Except(
new[] { "Super Admin", "Admin" });
}
fillDropDownCustomers();
}
答案 0 :(得分:4)
将这些值放在静态类中:
public static class MyRoles
{
public const string Admin = "Admin";
public const string SuperAdmin = "Super Admin";
public const string Support = "Support";
}
现在您可以像这样重复使用它们:
if (HttpContext.Current.User.IsInRole(MyRoles.SuperAdmin) ||
HttpContext.Current.User.IsInRole(MyRoles.Admin) ||
HttpContext.Current.User.IsInRole(MyRoles.Support))
{
答案 1 :(得分:2)
角色的工作方式是为用户可以执行的操作指定值。角色不会改变,但这些角色的行为确实如此。超动态解决方案往往过度杀伤。
所以也许你有以下角色
您可以拥有不同的操作(这取决于您的系统)
Etc
动态部分来自动作的分配。以这种方式做事你不关心某人的角色,但他们有什么行动。行动是这种关系中的动态方面。发出请求时,您将使用用户角色将指定的操作提取到该角色(数据库驱动以使其可修改)
将其作为“ 角色有许多操作 ”并入您的数据库结构,意味着如果将来发生变化,您将需要更新数据库中的关系但不是代码。
数据库结构可能看起来像这样,取决于您的需求。
发出请求时,您会识别用户等 用户名 ,然后锻炼 角色 他们通过查询RoleAction来加载他们相关的 操作
我会将 枚举 用于您的操作和角色值。这使得它更容易使用。要确保数据库和代码处于接收器中,请确保编写单元测试,将数据库值与枚举值进行协调。
答案 2 :(得分:0)
简单的答案是使用常量。更多上下文的答案是使用IoC将逻辑推送到另一个类,您可以在其中管理配置或数据库之间的关系。
答案 3 :(得分:0)
正如其他答案所暗示的那样,为常量变量。但是,如果要更改其中一个角色的名称,仍需要更改代码并重新发布。
另一种选择是将角色的名称添加到配置文件中。您将使用应用程序设置或继承自ConfigurationSection
的自定义配置类。看一下http://msdn.microsoft.com/en-us/library/2tw134k3.aspx
通过这种方式,您可以更改web.config文件中角色的名称,而无需更新任何代码或重新发布项目。