我正在实现一个我希望在多个应用程序中使用的自定义IPrincipal
。
我有2个关于IsInRole
方法的问题......
1)我是否建议将自定义RoleProvider与自定义IPrincipal
一起使用?我总是可以将检查用户角色的逻辑放在继承自IPrincipal的类中。
类似的东西:
public class SSDSPrincipal : IPrincipal
{
public SSDSPrincipal(SSDSIdentity identity)
{
this.Identity = identity;
}
public IIdentity Identity {get;private set;}
public bool IsInRole(string role)
{
string[] roles = Roles.Providers["SSDSRoleProvider"].GetRolesForUser(Identity.Name);
return roles.Any(s => role.Contains(s));
}
}
2)因为我想在多个MVC3应用程序中使用它。存储应用程序名称的最佳位置在哪里?我需要能够手动设置它。
public bool IsInRole(string role)
{
string applicationName = [where can I store this globally for my asp.net mvc3 app]
return AreTheyInARoleForThisApplication(applicationName, role);
}
答案 0 :(得分:2)
我会说你可以自由地使用你想要的任何技术,以便找出一个用途是否有用。在这里,RoleProvider不是必须的。
您不能将应用程序名称作为构造函数参数传递,然后将其存储在成员中吗?
答案 1 :(得分:1)
1)您不必拥有角色提供程序,但是如果您这样做,那么您的想法是您的自定义角色提供程序应该从System.Web.Security.RoleProvider继承,以便可以为任何其他角色提供程序进行交换。不破坏应用程序
2)web.config或app.config是此
的适当位置