效果图:

如果没有权限时,显示:

代码:

    public class AuthorizeAdminAttribute : TypeFilterAttribute
{
#region 字段 private readonly bool _ignoreFilter; #endregion #region 构造函数 /// <summary>
/// 构造函数
/// </summary>
/// <param name="ignore">是否忽略过滤。默认为false</param>
public AuthorizeAdminAttribute(bool ignore = false) : base(typeof(AuthorizeAdminFilter))
{
this._ignoreFilter = ignore;
this.Arguments = new object[] { ignore };
} #endregion #region 属性 /// <summary>
/// 获取是否忽略过滤?
/// </summary>
public bool IgnoreFilter => _ignoreFilter; #endregion #region 内部过滤器 /// <summary>
/// 管理员授权过滤器
/// </summary>
private class AuthorizeAdminFilter : IAuthorizationFilter
{
#region 字段 private readonly bool _ignoreFilter;
//private readonly IPermissionService _permissionService;
//假设这个 IPermissionService 是我们业务上需要访问数据库获取用户是否有权限访问的类。 #endregion #region 构造函数 public AuthorizeAdminFilter(bool ignoreFilter /*, IPermissionService permissionService*/ )
{
this._ignoreFilter = ignoreFilter;
//this._permissionService = permissionService;
} #endregion #region 方法 public void OnAuthorization(AuthorizationFilterContext filterContext)
{
if (filterContext == null)
throw new ArgumentNullException(nameof(filterContext)); //检查是否已经被 Action 方法重写了
var actionFilter = filterContext.ActionDescriptor.FilterDescriptors
.Where(filterDescriptor => filterDescriptor.Scope == FilterScope.Action)
.Select(filterDescriptor => filterDescriptor.Filter).OfType<AuthorizeAdminAttribute>().FirstOrDefault(); if (actionFilter?.IgnoreFilter ?? _ignoreFilter)
return; if (filterContext.Filters.Any(filter => filter is AuthorizeAdminFilter))
{
//下面是访问自定义的服务,获取当前登录用户是否有权限访问
//bool hasPermission = _permissionService.Authorize(StandardPermissionProvider.AccessAdminPanel);
bool hasPermission = new Random().Next(, ) > ? true : false;
if (!hasPermission)
filterContext.Result = new ChallengeResult();
}
} #endregion
} #endregion
}

使用方法:

谢谢浏览!

最新文章

  1. DIV+CSS:Margin和Padding属性[转载]
  2. Send push notification on Apple (APNS) on c#.net
  3. Zabbix监控windows部署安装
  4. lintcode :二叉树的最大深度
  5. android里Toast的用法
  6. 关于python27 中文编码
  7. 使用ObjectInputStream的readObject()方法如何判断读取到多个对象的结尾
  8. GCD教程(一):基本概念
  9. 蓝桥杯-格子中输出-java
  10. redis绑定ip以及启动和查看启动状态
  11. day23 Pythonpython 本文re模块
  12. flask-script&amp;flask-migrate使用
  13. 一道Javascript面试题引发的血案
  14. Cocoa 集合类型:NSPointerArray,NSMapTable,NSHashTable
  15. kafka集群安装,配置
  16. Spring boot --- Spring Oauth(一)
  17. 41-mysql作业
  18. JAVA-JSP Scriptlets(JSP小脚本)
  19. [BZOJ 4555][Tjoi2016&amp;Heoi2016]求和
  20. vue css动画

热门文章

  1. 解决 mac 10.14.4 无法 sublime text 3207 安装 Package Control,以及安装第三方包报错 `Package Control There are no packages available for installation`
  2. SpringBoot2.0之六 多环境配置
  3. GitHub开源:SQLite 增强组件 Sheng.SQLite.Plus
  4. linux中使用docker-compose部署软件配置分享
  5. Windows10系统:任务栏中电池图标消失问题的解决方法
  6. expect实现自动交互由浅入深
  7. was cached in the local repository, resolution will not be reattempted until the update interval of fintech has elapsed or updates are forced
  8. OAuth2实现单点登录SSO
  9. springboot~hazelcast缓存中间件
  10. 把项目中那些恶心的无处存储的大块数据都丢到FastDFS之快速搭建