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.pswp.cn/news/387517.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387517.shtml
英文地址,請注明出處:http://en.pswp.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…