在MVC中,我们常常需要对不同用户控制不同权限的访问。为此,MVC提供了一种简单易用的方式:AuthorizeAttribute。AuthorizeAttribute是一个特性标签,可以用于控制器的类或方法上,用于限制用户对应的访问级别。根据具体情况,我们可以自定义AuthorizeAttribute,在开发中灵活应用。
使用方法
MVC内置了若干AuthorizeAttribute的子类,包括:
- [Authorize],限制以当前用户登陆访问本控制器和其下所有公共方法
- [AllowAnonymous],开启匿名访问,即不受限制的用户可以访问控制器和其下所有公共方法
- [Authorize(Roles = “Admin, SuperAdmin”)],限制已登陆用户只能访问本控制器和其下所有公共方法中Admin和SuperAdmin角色才能访问
我们也可以自定义AuthorizeAttribute,这里,我们以某电商平台为例介绍一下如何实现自定义授权。
首先我们创建一个Attribute类,派生自AuthorizeAttribute,代码如下:
```
public class EcommerceAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
if (!httpContext.User.Identity.IsAuthenticated) {
//未登陆用户,重定向到登陆页面
httpContext.Response.Redirect("~/Account/Login");
return false;
}
if (Roles == null) {
//未定义角色,无限制访问
return true;
}
//已登陆但角色未通过验证,重定向到不允许访问页面
if (!httpContext.User.IsInRole(Roles)) {
httpContext.Response.Redirect("~/Account/UnAuthorized");
return false;
}
return true;
}
}
```
接着,在需要进行控制的控制器或者方法上,使用以下代码进行标记:
```
[EcommerceAuthorize(Roles=“Admin, SuperAdmin”)]
public ActionResult OrderManager(){
//...
}
```
以上代码表示只有处于Admin或SuperAdmin角色的用户才有权限访问OrderManager。
案例说明
以下是一个简单的整合示例,假设我们要为一个电商网站创建一个控制器来管理用户订单,只有店家才有权限访问。因此,我们先自定义EcommerceAuthorizeAttribute:
```
public class EcommerceAuthorizeAttribute : AuthorizeAttribute {
protected override bool AuthorizeCore(HttpContextBase httpContext) {
if (!httpContext.User.Identity.IsAuthenticated)
{
//未登陆用户,重定向到登陆页面
httpContext.Response.Redirect("~/Account/Login");
return false;
}
if (!httpContext.User.IsInRole("Shop"))
{
//不是店家,重定向到不允许访问页面
httpContext.Response.Redirect("~/Account/UnAuthorized");
return false;
}
return true;
}
}
```
然后在后台管理控制器上应用该特性:
```
[EcommerceAuthorize(Roles = "Shop")]
public class AdminController : Controller
{
//订单管理
public ActionResult Orders()
{
return View();
}
}
```
这样设置后,我们就可以实现仅对店家用户开放订单管理功能了。
我们也可以对不同角色进行定制化控制。比如设置对管理员开放用户管理功能:
```
[EcommerceAuthorize(Roles = “Admin”)]
public class AdminController : Controller
{
//用户管理
public ActionResult Users()
{
return View();
}
}
```
需要注意的是,Roles属性中各个角色使用英文半角逗号隔开。
以上就是本文的MVC自定义AuthorizeAttribute实现权限管理的介绍,希望对您有所帮助! 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复