Asp.net MVC自定义权限

简介:

MVC框架的一个很重要的优势在于可拓展性很高。权限的管理在每一个Web应用程序中都非常重要,虽然微软提供了Membership的默认权限设置,但在更多的情况下,Membership默认的权限设置并不能满足我们实际的需要。

    下面本文将用一种简单的办法来自定义权限。

     在MVC框架中,属性常用来限定控制器(Controller)的访问。所以我们首先从AuthorizeAttribute类中继承一个自定义的权限类。

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 
 7 namespace MvcApplication_AuthorizeAttribute.Models
 8 {
 9     public class MyAuthAttribute : AuthorizeAttribute  
10     {
11         // 只需重载此方法,模拟自定义的角色授权机制  
12         protected override bool AuthorizeCore(HttpContextBase httpContext)
13         {
14             if (!httpContext.User.Identity.IsAuthenticated)//判断用户是否通过验证
15                 return false;
16             string[] StrRoles = Roles.Split(',');//通过逗号来分割允许进入的用户角色
17             if (string.IsNullOrWhiteSpace(Roles))//如果只要求用户登录,即可访问的话
18                 return true;
19             bool isAccess = JudgeAuthorize(httpContext.User.Identity.Name, StrRoles);
20             if (StrRoles.Length > 0 && isAccess) //先判断是否有设用户权限,如果没有不允许访问
21                 return false;
22 
23             return true;
24         }
25         /// <summary>
26         /// 根据用户名判断用户是否有对应的权限
27         /// </summary>
28         /// <param name="UserName"></param>
29         /// <param name="StrRoles"></param>
30         /// <returns></returns>
31         private bool JudgeAuthorize(string UserName, string[] StrRoles)
32         {
33             string UserAuth = GetRole(UserName);  //从数据库中读取用户的权限
34             return StrRoles.Contains(UserAuth,    //将用户的权限跟权限列表中做比较
35                              StringComparer.OrdinalIgnoreCase);  //忽略大小写
36         }
37 
38    
39 
40         // 返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息  
41         private string GetRole(string name)
42         {
43             switch (name)
44             {
45                 case "aaa": return "User";
46                 case "bbb": return "Admin";
47                 case "ccc": return "God";
48                 default: return "Fool";
49             }
50         }  
51     }
52 }
复制代码

以上的代码只是示例而已。你可以将实际的权限控制逻辑写在自定义的权限控制类(MyAuthAttribute)里面。如果在特定的业务过程中,用户没有访问权限,就返回false。然后我们要做的就是把这个类属性放在要控制的控制器(Controller)或者Action上面。代码如下所示。

1      [MyAuth(Roles = "User")] 
2         public ActionResult About()
3         {
4             return View();
5         }


这样,我们就完成了简单的自定义权限了。

本文示例代码

参考链接

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/archive/2013/01/12/2857992.html如需转载请自行联系原作者


kissazi2

相关文章
|
3月前
|
前端开发 JavaScript 关系型数据库
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
使用 OpenAuth.Net 快速搭建 .NET 企业级权限工作流系统
103 0
|
10月前
|
JSON 安全 API
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
155 13
|
10月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
234 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
199 7
|
12月前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
149 0
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
170 1
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
219 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
165 0
|
前端开发 .NET 程序员
ASP.NET MVC学习---(九)权限过滤机制(完结篇)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/38412719 相...
835 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
382 0