asp.net core根据用户权限控制页面元素的显示

Intro

在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源,显示不同的内容,之前做了一个 AccessControlHelper 的项目,就是解决这个问题的。

asp.net core 支持 TagHelper 和 基于 Policy 的认证

AccessControlHelper 从1.4.0 版本开始支持 TagHelper 和 基于 Policy 的认证

TagHelper 用法

在 Views 目录下的 ~ViewImport.cshtml 中加入 TagHelper 引用

@addTagHelper *, WeihanLi.AspNetMvc.AccessControlHelper

在需要有权限才能访问的元素上加上 asp-access ,支持自定义一个key,如果有特殊的key可以设置 asp-access-key,下面有个示例

     <ul class="list-group" asp-access asp-access-key="12334"><li role="separator" class="list-unstyled"><br /></li><li class="list-group-item">@Html.ActionLink("用户管理", "UserList", "Account")</li><li class="list-group-item">@Html.ActionLink("操作日志查看", "Index", "OperationLog")</li><li class="list-group-item">@Html.ActionLink("系统设置管理", "Index", "SystemSettings")</li><li class="list-group-item">@Html.ActionLink("微信设置管理", "Index", new {controller = "Config",area = "Wechat"})</li></ul>

示例代码完整源码

实现自己的访问策略

可以参考这个项目的实现 https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation.Helper/Services/PermissionRequireStrategy.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WeihanLi.AspNetMvc.AccessControlHelper;
using WeihanLi.Common.Models;namespace ActivityReservation.Filters
{public class AdminPermissionRequireStrategy : IActionAccessStrategy{private readonly IHttpContextAccessor _accessor;public AdminPermissionRequireStrategy(IHttpContextAccessor accessor){_accessor = accessor;}public bool IsCanAccess(string accessKey){var user = _accessor.HttpContext.User;return user.Identity.IsAuthenticated && user.IsInRole("Admin");}public IActionResult DisallowedCommonResult => new ContentResult{Content = "No Permission",ContentType = "text/plain",StatusCode = 403};public IActionResult DisallowedAjaxResult => new JsonResult(new JsonResultModel{ErrorMsg = "No Permission",Status = JsonResultStatus.NoPermission});}public class AdminOnlyControlAccessStragety : IControlAccessStrategy{private readonly IHttpContextAccessor _accessor;public AdminOnlyControlAccessStragety(IHttpContextAccessor httpContextAccessor) => _accessor = httpContextAccessor;public bool IsControlCanAccess(string accessKey){var user = _accessor.HttpContext.User;return user.Identity.IsAuthenticated && user.IsInRole("Admin");}}
}

这个示例实现的比较简单,只是判断了一下是否有 Admin 角色,可以根据实际情况根据请求的地址以及当前登录用户及其它可能用到的信息去判断是否有权限访问。

注册服务

在 Startup 文件中 ConfigureServices 中注册权限服务,注册自己的访问策略

// register access control service
services.AddAccessControlHelper<Filters.AdminPermissionRequireStrategy, Filters.AdminOnlyControlAccessStragety>();

Policy 访问使用

在需要设置权限的 Action 或者 Controller 上加 [Authorize("AccessControl")] 或者 [Authorization(Policy="AccessControl")]

这两种方式是 asp.net core 下支持的 Policy 方式使用
也支持比较传统的直接使用 [AccessControl]AccessControlNoAccessControl 可以搭配使用, 类似于 AuthorizeAllowAnoymous

TagHelper 使用效果实例

测试登录地址

普通用户: Alice/Test1234
管理员: admin/Admin888

请不要修改密码/或者删除已有账号。。。

查看后台首页

管理员用户登录看到的界面:

普通用户登录看到的界面:

Reference

  • Github
  • Nuget
  • 示例项目
  • 实例项目

转载于:https://www.cnblogs.com/weihanli/p/10328554.html

asp.net core根据用户权限控制页面元素的显示相关推荐

  1. jsp页面从session获取当前用户信息控制页面按钮是否显示

    <c:if test="${sessionScope.org.id == 43}"><li onclick="openCheckDialog()&quo ...

  2. struts2如何使用拦截器进行用户权限控制

    大多数网站会设置用户权限,如过滤非法用户,用户不登录时不能进行访问,或者设置访问的权限,如部分内容仅对VIP开放等等,这些权限的控制都可以用struts2中的拦截器来实现. 下面通过一个简单的Demo ...

  3. 用户权限控制(Token登录)

    1.用户权限控制 1.1 用户登录 1.1.1 流程分析 1) 用户登录界面,需要输入手机号密码 2) 登录组件 login.vue 登录按钮 type="primary" :lo ...

  4. mysql用户控制登录_MySql用户权限控制_MySQL

    bitsCN.com MySql用户权限控制 本文将介绍MySql创建帐号,删除帐号,设置和介绍各种帐号的权限 创建用户帐号: www.bitsCN.com [sql] CREATE USER use ...

  5. Vue2.0用户权限控制解决方案

    Vue2.0用户权限控制解决方案 参考文章: (1)Vue2.0用户权限控制解决方案 (2)https://www.cnblogs.com/zhumengke/articles/11526973.ht ...

  6. Vue-Access-Control:前端用户权限控制解决方案

    Vue-Access-Control:前端用户权限控制解决方案 参考文章: (1)Vue-Access-Control:前端用户权限控制解决方案 (2)https://www.cnblogs.com/ ...

  7. 案例分享:Qt激光加工焊接设备信息化软件研发(西门子PLC,mysql数据库,用户权限控制,界面设计,参数定制,播放器,二维图,期限控制,参数调试等)

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/127669684 长期持续项目技术分享,有专业Qt需求请 ...

  8. Java系列技术之SSH整合+用户权限控制模型项目-钟洪发-专题视频课程

    Java系列技术之SSH整合+用户权限控制模型项目-62人已学习 课程介绍         将前面讲过的Spring5.SpringMVC.Hibernate5和前端框架Easyui整合起来最终完成一 ...

  9. JS--JavaScript使用键盘事件、键盘事件属性(keyCode、charCode、target...)、使用键盘控制页面元素

    键盘事件 当用户操作键盘时会触发键盘事件,键盘事件主要包括下面3种类型: keydown: 在键盘上按下某个键时触发.如果按住某个键,会不断触发该事件,但是Opera浏览器不支持这种连续操作.该事件处 ...

最新文章

  1. 莫比乌斯反演专题学习笔记
  2. 系统调优一之内存子系统
  3. pythonweb毕业设计-[分享]我发现了一个快速完成物联网毕业设计的好方法!
  4. MVC 用户权限HttpContext.User.IsInRole()
  5. OpenCL 第8课:旋转变换(2)
  6. Python 内置模块之 logging
  7. ie8浏览器自定义工具栏设置教程
  8. MyBatis复习(二):mybatis-config.xml核心配置文件
  9. 通过二进制方式_部署node节点_安装kubelet和kube-proxy---K8S_Google工作笔记0014
  10. php在类里如何调用call_user_func_array《细说php2》
  11. ElasticSearch 5学习(10)——结构化查询(包括新特性)
  12. 【转】强大的矩阵奇异值分解(SVD)及其应用
  13. 生产排程系统_【聚焦】纸箱世界智能制造纸板纸箱厂的高级计划与排程系统应用...
  14. 电容式触摸按键原理调研总结
  15. TFS2010用户解锁
  16. ubuntu 安装 魔霸_ROG 玩家国度 魔霸2怎么安装系统?
  17. 辉太郎看前端(js异步宏任务和微任务)
  18. 全国道路运证基本信息查询服务器,道路运政管理信息系统.doc
  19. 《老男孩》上映 “娱乐宝”投资电影进入回收期
  20. 树莓派3B使用tensorflow的classify_image进行物体识别

热门文章

  1. android 美颜录像,Android 关于美颜/滤镜 利用PBO从OpenGL录制视频
  2. docker build 变量_DockerFile 设置环境变量
  3. android 自定义 theme,Android使用Theme自定义Activity进入退出动画的方法
  4. airflow sql_alchemy_conn mysql_airflow使用mysql数据库,LocalExecutor并发调度
  5. c语言中的break和continue
  6. python岗位 上海_上海黑马Python24期,平均薪资10150元,16个工作日就业率70.73%
  7. 抓localhost包 - rawcap
  8. html 表格套表格_HTML表格
  9. 简单三层架构(登录)
  10. web安全-----CSRF漏洞