MVC自定义AuthorizeAttribute实现权限管理

在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/

点赞(85) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部