我有一个应用程序,它分别使用Windows和SqlRoleProvider进行用户身份验证和角色管理。它与我添加到数据库中的默认测试用户合作得很好。该应用程序要求用户登录(使用Windows凭据),然后才能将此内部应用程序用作基本的“用户”。如果需要将用户添加到高级角色,则管理员将在第一次登录后对此负责。
尽管如此,当用户第一次登录时,我将如何将他们添加到默认角色中呢?从逻辑上讲,我知道我需要调用Roles.IsUserInRole(),然后添加它们,如果它们不是;但是,我将在哪里这样做呢?我很难在Global.asax中找到要使用的事件。
谢谢
编辑:为了稍微扩展一下场景,我没有使用完整的成员资格提供程序系统,因为需要编写新的提供程序以允许将连接字符串存储在web.config之外。我不使用任何形式的注册或登录页面,让IIS中的处理身份验证方面,而我的增强SqlRoleProvider则管理用户角色。这个系统对用户来说很好,因为我通过硬编码测试来设置角色。我只是在寻找一种方法来添加新用户(通过IIS进行身份验证),以便立即添加到默认的“用户”角色中。我想我找到了;不过,我现在正在研究如何避免因性能原因而对每一项要求开火。
发布于 2008-12-09 20:51:49
我能够找到解决方案后,挖掘和玩了更多。我将下面的代码添加到我的Global.asax文件中,它实现了我希望的结果。
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中吗?
发布于 2008-12-09 20:23:23
在获取用户之后,我将直接向用户添加默认角色。
就像这样:
user = Membership.GetUser()
if (user != null)
{
// default role
string[] defaultRoles = {"MyRole"};
AddUsersToRoles(user, defaultRoles);
}发布于 2008-12-09 21:08:49
为什么不把它当登录或注册?
登录时,处理该事件并将其放入其中。每次他们登录的时候都要检查。
https://stackoverflow.com/questions/354068
复制相似问题