开发者社区> 陈珙> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

.Net Core实战之基于角色的访问控制的设计(三)

简介: .Net Core实战之基于角色的访问控制的设计(三)
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>


全局功能权限值查询


1 /// <summary>
 2     /// 全局用户权限值查询
 3     /// </summary>
 4     public class GobalPermCodeAttribute : IActionFilter
 5     {
 6         private readonly AdministratorService _administratorService;
 7
 8         public GobalPermCodeAttribute(AdministratorService administratorService)
 9         {
10             _administratorService = administratorService;
11         }
12
13         private static AdministratorData GetCurrentUser(HttpContext context)
14         {
15             return context.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.UserData)?.Value.FromJson<AdministratorData>();
16         }
17
18
19         public void OnActionExecuting(ActionExecutingContext context)
20         {
21             ((Controller)context.Controller).ViewData["PermCodes"] = new List<int>();
22
23             if (context.HttpContext.Request.IsAjax())
24                 return;
25
26             var user = GetCurrentUser(context.HttpContext);
27             if (user == null)
28                 return;
29
30             if (user.IsSuper)
31                 return;
32
33             ((Controller)context.Controller).ViewData["PermCodes"] = _administratorService.GetActionCode(user.UserId).ToList();
34         }
35
36         public void OnActionExecuted(ActionExecutedContext context)
37         {
38         }
39     }


LayUI Buttom的TagHelper封装


1   [HtmlTargetElement("LayuiButton")]
 2     public class LayuiButtonTag : TagHelper
 3     {
 4         #region 初始化
 5         private const string PermCodeAttributeName = "PermCode";
 6         private const string ClasstAttributeName = "class";
 7         private const string LayEventAttributeName = "lay-event";
 8         private const string LaySubmitAttributeName = "LaySubmit";
 9         private const string LayIdAttributeName = "id";
10         private const string StyleAttributeName = "style";
11
12         [HtmlAttributeName(StyleAttributeName)]
13         public string Style { get; set; }
14
15         [HtmlAttributeName(LayIdAttributeName)]
16         public string Id { get; set; }
17
18         [HtmlAttributeName(LaySubmitAttributeName)]
19         public string LaySubmit { get; set; }
20
21         [HtmlAttributeName(LayEventAttributeName)]
22         public string LayEvent { get; set; }
23
24         [HtmlAttributeName(ClasstAttributeName)]
25         public string Class { get; set; }
26
27         [HtmlAttributeName(PermCodeAttributeName)]
28         public int PermCode { get; set; }
29
30         [HtmlAttributeNotBound]
31         [ViewContext]
32         public ViewContext ViewContext { get; set; }
33
34         #endregion
35         public override async void Process(TagHelperContext context, TagHelperOutput output)
36         {
37             context.ThrowIfNull();
38             output.ThrowIfNull();
39
40             var administrator = ViewContext.HttpContext.GetCurrentUser();
41             if (administrator == null)
42                 return;
43
44             var childContent = await output.GetChildContentAsync();
45
46             if (((List<int>)ViewContext.ViewData["PermCodes"]).Contains(PermCode) || administrator.IsSuper)
47             {
48                 foreach (var item in context.AllAttributes)
49                 {
50                     output.Attributes.Add(item.Name, item.Value);
51                 }
52
53                 output.TagName = "a";
54                 output.TagMode = TagMode.StartTagAndEndTag;
55                 output.Content.SetHtmlContent(childContent.GetContent());
56             }
57             else
58             {
59                 output.TagName = "";
60                 output.TagMode = TagMode.StartTagAndEndTag;
61                 output.Content.SetHtmlContent("");
62             }
63         }
64     }


视图代码


image.png


结尾

  

以上就是我本篇分享的内容,项目是以单体应用提供的,方案思路也适用于前后端分离。最后附上几个系统效果图

image.png


image.png


image.png

?

?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Security-内置访问控制方法介绍和角色权限判断
Spring Security-内置访问控制方法介绍和角色权限判断
0 0
RBAC基于角色的访问控制权限的基本模型
RBAC基于角色的访问控制权限的基本模型
0 0
.Net Core实战之基于角色的访问控制的设计-
2年前开源了Sikiro.RBAC系统(https://github.com/SkyChenSky/Sikiro.RBAC)但是缺少了部署流程,这次通过申请免费的ECS,重新把流程梳理了下,并整理成改篇文章。 .Net Core实战之基于角色的访问控制的设计(https://www.cnblogs.com/skychen1218/p/13053878.html)
0 0
.Net Core实战之基于角色的访问控制的设计-部署篇
2年前开源了Sikiro.RBAC系统(https://github.com/SkyChenSky/Sikiro.RBAC)但是缺少了部署流程,这次通过申请免费的ECS,重新把流程梳理了下,并整理成改篇文章。 .Net Core实战之基于角色的访问控制的设计(https://www.cnblogs.com/skychen1218/p/13053878.html)
0 0
.Net Core实战之基于角色的访问控制的设计-部署篇
2年前开源了Sikiro.RBAC系统(https://github.com/SkyChenSky/Sikiro.RBAC)但是缺少了部署流程,这次通过申请免费的ECS,重新把流程梳理了下,并整理成改篇文章。 .Net Core实战之基于角色的访问控制的设计(https://www.cnblogs.com/skychen1218/p/13053878.html)
0 0
.Net Core实战之基于角色的访问控制的设计(二)
.Net Core实战之基于角色的访问控制的设计(二)
0 0
.Net Core实战之基于角色的访问控制的设计(一)
.Net Core实战之基于角色的访问控制的设计(一)
0 0
RBAC基于角色的访问控制权限的基本模型
RBAC基于角色的访问控制权限的基本模型
0 0
基于角色访问控制RBAC权限模型的动态资源访问权限管理实现
前面主要介绍了元数据管理和业务数据的处理,通常一个系统都会有多个用户,不同用户具有不同的权限,本文主要介绍基于RBAC动态权限管理在crudapi中的实现。RBAC权限模型(Role-Based Access Control)即:基于角色的权限控制。模型中有几个关键的术语: 用户:系统接口及访问的操作者 权限:能够访问某接口或者做某操作的授权资格 角色:具有一类相同操作权限的用户的总称 。 #### 用户角色权限关系 一个用户有一个或多个角色 一个角色包含多个用户 一个角色有多种权限 一个权限属于多个角色
0 0
EMQ
支持 ACL 访问控制、引入 HOCON 全新配置文件格式
11月,超轻量MQTT Broker NanoMQ 0.14版本发布,推出了ACL鉴权服务,并引入了HOCON格式的配置文件。
0 0
+关注
陈珙
现任SF轻小说系统架构师,10年的.Net领域经验,专注微服务架构、分布式系统设计、高并发方案与高效工程化。.Net广州俱乐部成员,博客园作者(陈珙)
文章
问答
文章排行榜
最热
最新
相关电子书
更多
开源广进,用service cataloq构造k8s服务能力中心
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载


http://www.vxiaotou.com