我有一个应用程序分别使用Windows身份验证和SqlRoleProvider进行用户身份验证和角色管理。它与我作为默认值添加到数据库的测试用户一起工作正常。该应用程序要求用户登录(使用Windows凭据),然后才能将此内部应用程序用作基本“用户”。如果需要将用户添加到高级角色,则管理员将在首次登录后对此负责。
话虽如此,如何在首次登录时将用户添加到默认角色?从逻辑上讲,我知道我需要调用Roles.IsUserInRole()然后添加它们,如果它们不是;但是,我会在哪里这样做?我无法找到要使用的Global.asax中的哪个事件。
由于
修改 为了扩展场景,我没有使用完整的成员资格提供程序系统,因为要求编写新的提供程序以允许连接字符串存储在web.config之外。我没有使用任何形式的注册或登录页面,并且在我的增强型SqlRoleProvider管理用户角色时,让IIS中的Windows集成身份验证处理身份验证方面。该系统适用于我通过硬编码测试设置角色的用户。我只是想找到一种方法来添加新用户(谁将通过IIS进行身份验证),以立即添加到默认的“用户”角色。我想我找到了;但是,我现在正在研究如何在出于性能原因的每一个要求时解雇它。
答案 0 :(得分:1)
我能够在挖掘和玩耍之后找到解决方案。我将以下代码添加到我的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吗?
答案 1 :(得分:0)
我会在获取用户后直接向用户添加默认角色。
像这样:
user = Membership.GetUser()
if (user != null)
{
// default role
string[] defaultRoles = {"MyRole"};
AddUsersToRoles(user, defaultRoles);
}
答案 2 :(得分:0)
为什么不在登录或注册时把它?
登录时,处理该事件并将其放入。每次登录时都要检查。