Как я могу использовать PageLoad в Razor? - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь сделать это проще для разработчика, Поскольку существует несколько вариантов аутентификации, и не все страницы требуют аутентификации или полной аутентификации.

В WebForms я могу иметь общую страницу, Теперь каждая страница наследует GenericPage, и нужно только реализовать AuthorizationType (см. Код ниже)

Могу ли я сделать что-то похожее с Razor? Или, может быть, я должен что-то совсем другое ...

Вот код в WebForms:

public class GenericPage : Page
{
    public enum AuthorizationType
    {
        Users = 1,
        AuthUsers = 2,
        Admins = 4
    }

    public virtual bool IsAuth()
    {
        return Authenticator.IsAuth();
    }

    public virtual bool IsAdmin()
    {
        AuthUser authUser = Authenticator.GetAuthenticatedUser();
        return (authUser != null && authUser.IsAdmin)
    }

    protected abstract AuthorizationType Authorization
    {
        get;
    }

    protected virtual string OnAuthorizationFailedUrl
    {
        get
        {
            return HomePageUrl;
        }
    }

    protected void CheckAuthentication()
    {
        if (!IsUserAuthroized())
            Response.Redirect(OnAuthorizationFailedUrl);
    }

    protected bool IsUserAuthroized()
    {
        AuthorizationType authorization = Authorization;
        return (Authorization.Contains(AuthorizationType.Users) ||
                (Authorization.Contains(AuthorizationType.AuthUsers) && IsAuth()) ||
                (Authorization.Contains(AuthorizationType.Admins) && IsAdmin()));
    }

    override OnPageLoad()
    {
        CheckAuthentication();
    }
}

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

В вашем сценарии это может быть реализовано как 3 типа ролей.Когда вы аутентифицируете пользователей, назначайте роли правильно.

Затем в вашем контроллере или в методах действия контроллера вы можете поместить атрибут Authorize

[Authorize (Roles = "Users")]

или несколько ролей

[Authorize (Roles = "Users, Admins")]

Если вы хотите выполнять глобальную фильтрацию, вы можете создать BaseController и передать атрибут Authorize контроллеру.Тогда все ваши контроллеры должны реализовать BaseController.

Вот мой пост в блоге о том, как реализовать аутентификацию с индивидуальной идентификацией.

https://kevww.wordpress.com/2011/11/18/implement-formsauthentication-with-custom-identity-in-asp-net-mvc/

Надеюсьэто может помочь вам

2 голосов
/ 31 января 2012

Вы можете добавить этот тип авторизации в качестве глобального фильтра.

Фильтрация в asp.net mvc

http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html

...