首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SqlRoleProvider身份验证为新用户设置默认角色?

如何使用SqlRoleProvider身份验证为新用户设置默认角色?
EN

Stack Overflow用户
提问于 2008-12-09 20:13:44
回答 3查看 1.6K关注 0票数 1

我有一个应用程序,它分别使用Windows和SqlRoleProvider进行用户身份验证和角色管理。它与我添加到数据库中的默认测试用户合作得很好。该应用程序要求用户登录(使用Windows凭据),然后才能将此内部应用程序用作基本的“用户”。如果需要将用户添加到高级角色,则管理员将在第一次登录后对此负责。

尽管如此,当用户第一次登录时,我将如何将他们添加到默认角色中呢?从逻辑上讲,我知道我需要调用Roles.IsUserInRole(),然后添加它们,如果它们不是;但是,我将在哪里这样做呢?我很难在Global.asax中找到要使用的事件。

谢谢

编辑:为了稍微扩展一下场景,我没有使用完整的成员资格提供程序系统,因为需要编写新的提供程序以允许将连接字符串存储在web.config之外。我不使用任何形式的注册或登录页面,让IIS中的处理身份验证方面,而我的增强SqlRoleProvider则管理用户角色。这个系统对用户来说很好,因为我通过硬编码测试来设置角色。我只是在寻找一种方法来添加新用户(通过IIS进行身份验证),以便立即添加到默认的“用户”角色中。我想我找到了;不过,我现在正在研究如何避免因性能原因而对每一项要求开火。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-09 20:51:49

我能够找到解决方案后,挖掘和玩了更多。我将下面的代码添加到我的Global.asax文件中,它实现了我希望的结果。

代码语言:javascript
复制
protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
{
    if (!Roles.IsUserInRole(e.Identity.Name, "Users"))
    {
        Roles.AddUsersToRole(new string[] { e.Identity.Name }, "Users");
    }
}

我很担心,因为这段代码会激发每个页面请求。是否有更好的方法来限制发生这种情况?我应该把这个代码添加到登陆页面的page_load事件中而不是Global.asax中吗?

票数 1
EN

Stack Overflow用户

发布于 2008-12-09 20:23:23

在获取用户之后,我将直接向用户添加默认角色。

就像这样:

代码语言:javascript
复制
user = Membership.GetUser()
if (user != null)
{
  // default role 
  string[] defaultRoles = {"MyRole"};

  AddUsersToRoles(user, defaultRoles); 

}
票数 0
EN

Stack Overflow用户

发布于 2008-12-09 21:08:49

为什么不把它当登录或注册?

登录时,处理该事件并将其放入其中。每次他们登录的时候都要检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/354068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档