我有一个 ASP.NET MVC 网站,在那里我建立了一个权限系统。例如,当当前用户没有足够的权限时,某些链接会被隐藏。但是,如果他们手动输入该链接的 URL,他们仍然可以访问内容。
我知道我可以使用该[Authorize]
属性来阻止没有正确用户角色的用户,但是如何实现我自己的属性来阻止不满足自定义要求的用户的操作,而不必在每个操作中编写手动检查?
我有一个 ASP.NET MVC 网站,在那里我建立了一个权限系统。例如,当当前用户没有足够的权限时,某些链接会被隐藏。但是,如果他们手动输入该链接的 URL,他们仍然可以访问内容。
我知道我可以使用该[Authorize]
属性来阻止没有正确用户角色的用户,但是如何实现我自己的属性来阻止不满足自定义要求的用户的操作,而不必在每个操作中编写手动检查?
您可以编写自定义Authorize
属性并覆盖AuthorizeCore
可以放置自定义授权逻辑的方法:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authroized = base.AuthorizeCore(httpContext);
if (!authroized)
{
return false;
}
// at this stage the base authorization process has passed.
// now implement your custom authorization logic and return true or false
// here you have access to the HttpContext and as a consequence to all
// request and route parameters so you could implement any
// authorization logic you want
// And of course if you want a completely custom authorization logic
// ignoring the base functionality don't call the base method above
// but completely override anything here
}
}
现在剩下的就是用这个自定义属性来装饰相应的控制器/动作。
如果您使用 ASP.NET Membership,您可以配置 RoleProvider 并为您的用户提供角色。
然后,您可以使用 AuthorizeAttribute 上的 Roles 属性来检查角色。
[Authorize(Roles="Admin, SuperUser")]