ASP.NET MVC权限管理
ASP.NET MVC提供了AuthorizeAttribute,可用来控制Controller Action的安全性,但由于该属性所指定的角色或用户是写在代码中而不是在配置文件中的,因而不够灵活。
为能够更灵活、更细粒度地控制权限,需要某种方法能够在配置文件(如web.config)中定义权限,这样才能在不需要重新编译代码的情况下,通过修改配置文件即可改变应用程序的授权。一个简单的场景,[CustomAuthorize(Roles = "Manager")] ,与系统自带的[Authorize(Roles = "Manager")] ,区别在于:后面的权限控制是通过Membership Provider完成的,即当前用户有没有权限是通过Context.User.IsInRole("Managers")来判断的;第一个则是自定义ActionFilter通过读取配置项来完成权限控制的。
废话不说,上代码:
1. 从系统自带的AuthorizeAttribute继承(请注意:AuthorizeAttribute本身是从FilterAttribute继承且实现IAuthorizationFilter接口):
......
}
2. override其中关键的一个方法:AuthorizeCore
2 ...
3 }
4
5 private static bool UserInRole(string role) {
6 if (user.IsInRole(role))
7 return true;
8 return false;
9 }
3. 实现自定义授权:
if (httpContext == null){
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
var rolesInSetting = ConfigurationManager.AppSettings["RolesFor:" + Roles];
var usersInSetting = ConfigurationManager.AppSettings["UsersFor:" + Users];
if (!String.IsNullOrEmpty(usersInSetting)) {
var users = usersInSetting.Split(newchar[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (users != null|| users.Length > 0 && users.Contains(User.Identity.Name, StringComparer.OrdinalIgnoreCase))
return true;
}
if (String.IsNullOrEmpty(rolesInSetting))
returnfalsevar roles = rolesInSetting.Split(newchar[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (roles ==null|| roles.Length <=0)
returnfalse;
if (roles.Any(t => UserInRole(t))
returntrue;
returnfalse}
4. 配置文件 web.config
<add key="UsersFor:Manager" value="hackee,bill"/>
5. 配置Action方法:
public ActionResult GetSecureData() { ... }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述