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

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

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

查看后台首页

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

admin-user

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

common-user

Reference

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Please let us know in case of any issues

Please let us know in case of any issues转载于:https://www.cnblogs.com/zhangchenliang/archive/2010/05/18/1738117.html

Java面向对象(二)

source:http://blog.java1234.com/index.html?typeId1 Java类的继承 1&#xff0c;继承定义以及基本使用 定义&#xff1a;子类能够继承父类的属性和方法&#xff1b; 注意点&#xff1a;Java中只支持单继承&#xff1b; 私有方法不能继承&#xff1b; 2&#xff0c;方法重写 …

游戏通讯方式

农药自从上线以来&#xff0c;依靠着强大的产品力以及腾讯的运营能力&#xff0c;在游戏市场上表现可谓是风生水起&#xff0c;根据第三方的调研数据显示&#xff0c;《王者荣耀》渗透率达到22.3%&#xff0c;用户规模达到2.01亿人&#xff0c;每日的日活跃用户&#xff08;DAU…

小小c#算法题 - 3 - 字符串语句反转

题目&#xff1a;反转语句。 如I love Beijing! 反转后输出 !Beijing love I 特点是指反转单词的顺序&#xff0c;其他字符&#xff08;这个可以自己指定&#xff09;不反转。且不能用内置函数&#xff0c;如Split和Substring。 分析&#xff1a;我们需要保证一个单词的字…

unity5.4.3p2里面的AssetBundle打包流程

unity5.4.3p2里面的AssetBundle打包流程&#xff0c;相比之前unity4.x的打包简单了许多&#xff0c;Unity4.X中打包的时候需要自己去管理依赖关系&#xff0c;各种BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()&#xff0c;一不小心手一抖&…

静态查找表的实现

#ifndef SSTABLE_H #define SSTABLE_H#include <iostream> using namespace std;/************************************************************* SSTable&#xff1a;stastic search table 静态查找表的模板类实现 顺序存储结构 ************************************…

(转)javascript匿名函数

文章来源: http://hi.baidu.com/koen_li/blog/item/4b14e4fc0c9b140c08244d8c.html 匿名函数的写法 顾名思义&#xff0c;就是没有名字的函数&#xff08;⊙﹏⊙b汗&#xff09;。匿名函数通常用于javascript作用域的控制&#xff0c;可以有效的避免对全局变量的污染。常见的匿…

BZOJ3307 雨天的尾巴

题目链接&#xff1a;戳我 树上链修改->差分 每一个节点都开一个权值线段树&#xff0c;最后从下往上合并qwq 代码如下&#xff1a; #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #define MA…

主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa

主成分分析&#xff08;PCA&#xff09;原理详解 2016/12/17 IT技术 主成分分析, 数学 分享到&#xff1a;21原文出处&#xff1a; 中科春哥 一、PCA简介 1. 相关背景 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 是一种统…

1 Hadoop简介

1.1 什么是Hadoop 分布式计算平台 优点&#xff1a; 高可靠性 高扩展性 高效性 在各节点之间动态地移动数据&#xff0c;保证各个节点的动态平衡 高容错性 数据多副本&#xff1b;重新启动失败任务 Hadoop应用&#xff1a; Yahoo 广告系统Web搜索研究 Facebook 数据分…

Google Xpath Helper

Google Xpath Helper 下载方法&#xff1a; 1. 访问http://chrome-extension-downloader.com/ 2. 把https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl拷贝到文本框里面&#xff0c;然后点击“Download Extention”按钮。 使用方法&am…

【Tensorflow】 Object_detection之训练PASCAL VOC数据集

参考&#xff1a;Running Locally 1、检查数据、config文件是否配置好 可参考之前博客&#xff1a; Tensorflow Object_detection之配置Training Pipeline Tensorflow Object_detection之准备数据生成TFRecord 2、训练模型 PIPELINE_CONFIG_PATH/data/zxx/models/research/date…

2 Hadoop的安装与配置

需要JDK、SSH 对于伪分布式&#xff0c;Hadoop会采取与集群相同的处理方式&#xff1a;按次序启动文件conf/slaves中记载的主机上的进程&#xff0c;只不过在伪分布式中Slave为localhost&#xff08;自身&#xff09;。 Hadoop从三个角度将主机划分为两种角色&#xff1a; 最…

局域网访问控制

访问局域网内其他机器可用如下方式&#xff1a; \\PC-name\d$\dir 或者 \\192.168.xxx.xxx\d$\dir d代表d盘 但前提是对方机器已经把本机用户设置为管理员账户转载于:https://www.cnblogs.com/jimmy-c/p/4116804.html

Unity3d 插值同步

文中大体的思路&#xff1a; A玩家 移动时&#xff0c;本机自行移动&#xff0c;并发送移动指令给服务端&#xff0c;假设移动是成功的&#xff0c;服务端同步其他客户端 B玩家&#xff0c;B玩家 中用一个队列 Queue 来装服务端来的移动指令&#xff0c;然后客户端在updata中做…

laravel数据库相关操作说明

输出原生sql: DB::table(users)->where([[name,,张三]])->toSql(); //输出sql为&#xff1a;select * from users where name?; DB::table(users)->where([[name,,张三]])->getQuery(); //输出sql为&#xff1a;select * from users where name张三; 运行原生sql查…

1 数据挖掘基础

1.1 什么是数据挖掘 从大量数据中挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势&#xff0c;并用这些知识和规则建立用于决策支持的模型&#xff0c;提供预测性决策支持的方法、工具和过程&#xff0c;这就是数据挖掘。 是统计学、数据库技术、人工智能技术的结…

R文件报错的原因

一般R文件报错&#xff0c;无非是资源文件错误&#xff0c;图片命名错误&#xff0c;但是编译都会报错&#xff0c;可以很快解决。但是前几天&#xff0c;引入一个第三方aar包后&#xff0c;项目编译正确&#xff0c;但是就是R文件报错&#xff0c;找不到R文件&#xff0c;整个…

1.0 算法本机调试方法

算法的本机调试方法&#xff1a; 从本地文件中读取测试数据&#xff0c;进行算法调试。 例&#xff1a;读取两个数&#xff0c;输出和。 1 2 11 22 111 222 输出&#xff1a; 3 33 333 #include <fstream> //读取本地文件需要此头文件。调试完成后&#xff0c;提…

[转]Excel数据转化为sql脚本

在实际项目开发中&#xff0c;有时会遇到客户让我们把大量Excel数据导入数据库的情况。这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库。 1 在数据前插入一列单元格&#xff0c;用来拼写sql语句。 具体写法&#xff1a;"insert into t_student (id,name,age…