影评网站怎么做,网站建设价表模板,html5手机网站制作教程,江西合创建设工程有限公司 网站asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源#xff0c;显示不同的内容#xff0c;之前做了一个 AccessControlHelper 的项目#xff0c;就是解决这个问题的。 asp.net core 支持 TagHelper 和 基于 …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 classlist-group asp-access asp-access-key12334li roleseparator classlist-unstyledbr //lili classlist-group-itemHtml.ActionLink(用户管理, UserList, Account)/lili classlist-group-itemHtml.ActionLink(操作日志查看, Index, OperationLog)/lili classlist-group-itemHtml.ActionLink(系统设置管理, Index, SystemSettings)/lili classlist-group-itemHtml.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.AddAccessControlHelperFilters.AdminPermissionRequireStrategy, Filters.AdminOnlyControlAccessStragety(); Policy 访问使用 在需要设置权限的 Action 或者 Controller 上加 [Authorize(AccessControl)] 或者 [Authorization(PolicyAccessControl)] 这两种方式是 asp.net core 下支持的 Policy 方式使用 也支持比较传统的直接使用 [AccessControl]AccessControl 和 NoAccessControl 可以搭配使用 类似于 Authorize 和 AllowAnoymous TagHelper 使用效果实例 测试登录地址 普通用户 Alice/Test1234 管理员 admin/Admin888 请不要修改密码/或者删除已有账号。。。 查看后台首页 管理员用户登录看到的界面 普通用户登录看到的界面 Reference GithubNuget示例项目实例项目转载于:https://www.cnblogs.com/weihanli/p/10328554.html