允许管理员以具有Forms身份验证的用户身份编辑页面?

时间:2011-11-10 11:11:25

标签: c# asp.net forms-authentication

我最近开始在一个以前由其他人开发的网站上工作。该网站在asp.net上运行,虽然我非常擅长c#,但我不太了解asp.net的工作原理。

我的目标是让管理员可以使用相同的工具编辑用户的详细信息。用户编辑其详细信息时的页面。这就是这一行:

Membership.GetUser() // returns currently logged in user

返回管理员尝试编辑的常规用户,而不是返回管理员本身。如果可以的话,我可以很容易地向网站添加管理功能。

如果无法做到这一点,我将不得不在我的网站上重写各种功能,而不是:

MembershipUser user;
if (Roles.isUserInRole("admin")) {
    user = Utility.GetTheUserTheAdminIsEditing();
}
else {
    user = Membership.GetUser();
}

如果我必须这样做,我该如何实施Utility.GetTheUserTheAdminIsEditing()

目前,有一个像这样的登录功能:

private static bool _DoLogin(String user, String pass)
{          
    bool isAuthenticated = Membership.ValidateUser(user, pass.Trim());

    if (isAuthenticated == true)
    {
        // Create the authentication ticket
        FormsAuthenticationTicket authTicket = new
                FormsAuthenticationTicket(1,                          // version
                                        user,                       // user name
                                        DateTime.Now,               // creation
                                        DateTime.Now.AddMinutes(60),// Expiration
                                        false,                      // Persistent
                                        "");                    // User data


        // Now encrypt the ticket.
        string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
        // Create a cookie and add the encrypted ticket to the 
        // cookie as data.
        HttpCookie authCookie =
                        new HttpCookie(FormsAuthentication.FormsCookieName,
                                    encryptedTicket);


        // Add the cookie to the outgoing cookies collection. 
        HttpContext.Current.Response.Cookies.Add(authCookie);

        FormsIdentity id = new FormsIdentity(authTicket);
        // This principal will flow throughout the request.
        System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, Roles.GetRolesForUser(user));
        // Attach the new principal object to the current HttpContext object
        HttpContext.Current.User = principal;

        return true;
    }
    else
        return false;
}

我该如何实现?

1 个答案:

答案 0 :(得分:1)

我认为合适的解决方案是使用所有用户的列表创建一个管理员页面(仅对他可见),然后管理员可以编辑它们。

您可以将此管理页面放在站点的新文件夹中,然后使用以下行在该文件夹中创建一个web.config文件:

<system.web>
<authorization>

<allow roles="Admin"/> //Allows users in Admin role
<deny users="*"/> // deny everyone else

</authorization>
</system.web>

或者您可以将其添加到主web.config

<location path="AdminFolder">

    <system.web>
    <authorization>

    <allow roles="Admin"/> //Allows users in Admin role
    <deny users="*"/> // deny everyone else

    </authorization>
    </system.web>

</location>

甚至您只需显示\隐藏管理员链接Roles.isUserInRole("admin"))

即可