代码之家  ›  专栏  ›  技术社区  ›  Nestor

如何在没有app.config的情况下配置角色?

  •  2
  • Nestor  · 技术社区  · 15 年前

    我可以通过编程方式配置角色和成员资格吗?没有app.config(或web.config)?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Nestor    15 年前

    这是一种黑客行为,但我在这里为客户端应用程序服务配置角色:

    ClientRoleProvider crp = new ClientRoleProvider();
    // Initialize
    NameValueCollection crp_config = new NameValueCollection();
    crp_config.Add("serviceUri", "www.mydomain.com/Role_JSON_AppService.axd");
    crp_config.Add("cacheTimeout", 5);
    crp_config.Add("honorCookieExpiry", 300);
    crp.Initialize("ClientRoleProvider", crp_config);
    
    //RoleProviderCollection
    RoleProviderCollection rpc = new RoleProviderCollection();
    rpc.Add(crp);
    rpc.SetReadOnly();
    
    //Roles
    BindingFlags enuBindingFlags = BindingFlags.NonPublic | BindingFlags.Static;
    Type objRoleType = typeof(Roles);
    objRoleType.GetField("s_Initialized", enuBindingFlags).SetValue(null, true);
    objRoleType.GetField("s_InitializeException", enuBindingFlags).SetValue(null, null);
    objRoleType.GetField("s_Enabled", enuBindingFlags).SetValue(null, true);
    objRoleType.GetField("s_CookieName", enuBindingFlags).SetValue(null, ".ASPXROLES");
    objRoleType.GetField("s_CacheRolesInCookie", enuBindingFlags).SetValue(null, false);
    objRoleType.GetField("s_CookieTimeout", enuBindingFlags).SetValue(null, (int)30);
    objRoleType.GetField("s_CookiePath", enuBindingFlags).SetValue(null, "/");
    objRoleType.GetField("s_CookieRequireSSL", enuBindingFlags).SetValue(null, false);
    objRoleType.GetField("s_CookieSlidingExpiration", enuBindingFlags).SetValue(null, true);
    objRoleType.GetField("s_CookieProtection", enuBindingFlags).SetValue(null, CookieProtection.All);
    objRoleType.GetField("s_Domain", enuBindingFlags).SetValue(null, null);
    objRoleType.GetField("s_CreatePersistentCookie", enuBindingFlags).SetValue(null, false);
    objRoleType.GetField("s_MaxCachedResults", enuBindingFlags).SetValue(null, (int)25);
    objRoleType.GetField("s_Provider", enuBindingFlags).SetValue(null, crp);
    objRoleType.GetField("s_Providers", enuBindingFlags).SetValue(null, rpc);
    
        2
  •  0
  •   roufamatic RichardJohnn    15 年前

    http://msdn.microsoft.com/en-us/library/5k850zwb.aspx

    Roles.CreateRole("members");
    Roles.CreateRole("manager");
    
    Roles.AddUserToRole("JoeWorden", "manager");
    string[] userGroup = new string[2];
    userGroup[0] = "JillShrader";
    userGroup[1] = "ShaiBassli";
    Roles.AddUsersToRole(userGroup, "members");
    

    把它放在global.asax(application_start可能是你最好的选择)和Bob的叔叔中。