Разрешить администратору редактировать страницы как пользователь с проверкой подлинности с помощью форм? - PullRequest
0 голосов
/ 10 ноября 2011

Я недавно начал работать над сайтом, который ранее был кем-то разработан.Сайт работает на 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 Ответ

1 голос
/ 10 ноября 2011

Решение, которое я считаю нужным, заключается в создании страницы администратора (видимой только для него) со списком всех пользователей, а затем администратор может редактировать их.

Вы можете поместить эту страницу администратора в новую папку на своем сайте, а затем создать файл 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"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...