自定义IPrincipal,应用程序名称为IsInRole

时间:2012-07-25 09:22:54

标签: c# asp.net-mvc-3 roleprovider

我正在实现一个我希望在多个应用程序中使用的自定义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);
}

2 个答案:

答案 0 :(得分:2)

我会说你可以自由地使用你想要的任何技术,以便找出一个用途是否有用。在这里,RoleProvider不是必须的。

您不能将应用程序名称作为构造函数参数传递,然后将其存储在成员中吗?

答案 1 :(得分:1)

1)您不必拥有角色提供程序,但是如果您这样做,那么您的想法是您的自定义角色提供程序应该从System.Web.Security.RoleProvider继承,以便可以为任何其他角色提供程序进行交换。不破坏应用程序

2)web.config或app.config是此

的适当位置