我想让开发人员更容易, 因为有多个身份验证选项,并非所有页面都需要身份验证或完全身份验证。
在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();
}
}
提前致谢。
答案 0 :(得分:3)
在您的方案中,它可以实现为3种类型的角色。对用户进行身份验证时,请正确分配角色。
然后在您的控制器或控制器操作方法中,您可以放置Authorize属性
[授权(角色=“用户”)]
或多个角色
[授权(角色=“用户,管理员”)]
如果要全局过滤,可以创建BaseController并将Authorize属性赋予控制器。然后,所有控制器都需要实现BaseController。
以下是关于如何使用自定义身份实现身份验证的博文。
希望这可以帮到你
答案 1 :(得分:2)