如何在Razor中使用Page Load?

时间:2012-01-31 00:39:09

标签: asp.net-mvc razor

我想让开发人员更容易, 因为有多个身份验证选项,并非所有页面都需要身份验证或完全身份验证。

在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 个答案:

答案 0 :(得分:3)

在您的方案中,它可以实现为3种类型的角色。对用户进行身份验证时,请正确分配角色。

然后在您的控制器或控制器操作方法中,您可以放置​​Authorize属性

[授权(角色=“用户”)]

或多个角色

[授权(角色=“用户,管理员”)]

如果要全局过滤,可以创建BaseController并将Authorize属性赋予控制器。然后,所有控制器都需要实现BaseController。

以下是关于如何使用自定义身份实现身份验证的博文。

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

希望这可以帮到你

答案 1 :(得分:2)