Blame view

Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Authorization/PermissionGlobalAttribute.cs 2.15 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  using Microsoft.AspNetCore.Http.HttpResults;
  using Microsoft.AspNetCore.Mvc;
  using Microsoft.AspNetCore.Mvc.Controllers;
  using Microsoft.AspNetCore.Mvc.Filters;
  using Volo.Abp;
  using Volo.Abp.DependencyInjection;
  using Volo.Abp.Http;
  using Yi.Framework.Core.Helper;
  using static System.Runtime.InteropServices.JavaScript.JSType;
  
  namespace Yi.Framework.Rbac.Domain.Authorization
  {
      internal class PermissionGlobalAttribute : ActionFilterAttribute, ITransientDependency
      {
          private readonly IPermissionHandler _permissionHandler;
          public PermissionGlobalAttribute(IPermissionHandler permissionHandler)
          {
              _permissionHandler = permissionHandler;
          }
          public override void OnActionExecuting(ActionExecutingContext context)
          {
              if (context.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor) return;
              List<PermissionAttribute>? perAttributes = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
                     .Where(a => a.GetType().Equals(typeof(PermissionAttribute)))
                     .Select(x => x as PermissionAttribute)
                     .ToList()!;
              //空对象直接返回
              if (perAttributes.Count==0) return;
  
              var result = false;
              foreach (var perAttribute in perAttributes)
              {
                  result = _permissionHandler.IsPass(perAttribute.Code);
                  //存在有一个不满,直接跳出
                  if (!result)
                  {
                      break;
                  }
              }
  
  
              if (!result)
              {
                  var model = new RemoteServiceErrorInfo()
                  {
                      Code = "403",
                      Message = $"您无权限访问,请联系管理员申请",
                      Details = $"您无权限访问该接口-{context.HttpContext.Request.Path.Value}",
                  };
  
                  var content = new ObjectResult(new { error = model })
                  {
                      StatusCode = 403
                  };
                  context.Result = content;
                  return;
              }
          }
      }
  }