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

相关文章
|
2月前
|
Windows
.NET 隐藏/自定义windows系统光标
【10月更文挑战第20天】在.NET中,可以使用`Cursor`类来控制光标。要隐藏光标,可将光标设置为`Cursors.None`。此外,还可以通过从文件或资源加载自定义光标来更改光标的样式。例如,在表单加载时设置`this.Cursor = Cursors.None`隐藏光标,或使用`Cursor.FromFile`方法加载自定义光标文件,也可以将光标文件添加到项目资源中并通过资源管理器加载。这些方法适用于整个表单或特定控件。
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
45 7
|
4月前
|
开发框架 .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中的问题
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
72 0
|
4月前
|
前端开发 数据安全/隐私保护 UED
.NET 8 通用权限框架 前后端分离,开箱即用
【8月更文挑战第1天】基于.NET 8 的通用权限框架,采用前后端分离设计,实现真正的开箱即用!无需繁琐配置,一键启动权限管理新体验。利用.NET 8 的高性能与稳定性,结合灵活的前后端开发模式,显著提升开发效率,缩短项目周期。无论大小项目,皆能轻松应对,立即体验高效开发的新篇章!
115 1
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
53 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
4月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
136 0
|
7月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
207 0