IwbAuthorizationProvider.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Abp.Authorization;
  4. using Abp.Dependency;
  5. using Abp.Domain.Repositories;
  6. using Abp.Localization;
  7. using Abp.MultiTenancy;
  8. using WeApp.BaseInfo;
  9. using WeApp.Configuration;
  10. using IwbZero;
  11. namespace WeApp.Authorization
  12. {
  13. public class IwbAuthorizationProvider : AuthorizationProvider
  14. {
  15. protected readonly IIocManager IocManager;
  16. public IwbAuthorizationProvider(IIocManager iocManager)
  17. {
  18. IocManager = iocManager;
  19. }
  20. public override void SetPermissions(IPermissionDefinitionContext context)
  21. {
  22. using (var funRepository = IocManager.ResolveAsDisposable<IRepository<SysFunction>>())
  23. {
  24. var funs = funRepository.Object.GetAllList(a => a.IsDeleted == false);
  25. var topFunNo = System.Configuration.ConfigurationManager.AppSettings["SystemFunction.Top.FunctionNo"] ?? "HTSystem";
  26. var topFun = funs.FirstOrDefault(a => a.FunctionNo == topFunNo);
  27. var topPermName = topFun?.PermissionName ?? PermissionNames.Pages;
  28. var topPermission = context.GetPermissionOrNull(topPermName) ?? context.CreatePermission(topPermName, properties: new Dictionary<string, object>() { [IwbConsts.AuthPropertiesFunName] = topFun });
  29. SetChildPermissions(topPermission, funs, topFunNo);
  30. }
  31. }
  32. private void SetChildPermissions(Permission permission, IList<SysFunction> list, string parentNo, MultiTenancySides parentMultiTenancySide = MultiTenancySides.Tenant | MultiTenancySides.Host)
  33. {
  34. var funs = list.Where(a => a.ParentNo == parentNo).ToList();
  35. if (funs.Any())
  36. {
  37. foreach (var fun in funs)
  38. {
  39. permission.RemoveChildPermission(fun.PermissionName);
  40. var multiTenancySide = parentMultiTenancySide == MultiTenancySides.Host
  41. ? MultiTenancySides.Host
  42. : fun.Script != null && (fun.Script.ToLower().StartsWith("host") || fun.Script.ToLower().StartsWith("_host"))
  43. ? MultiTenancySides.Host
  44. : MultiTenancySides.Tenant | MultiTenancySides.Host;
  45. var childPermission = permission.CreateChildPermission(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), multiTenancySides: multiTenancySide, properties: new Dictionary<string, object>() { [IwbConsts.AuthPropertiesFunName] = fun });
  46. SetChildPermissions(childPermission, list, fun.FunctionNo, multiTenancySide);
  47. }
  48. }
  49. }
  50. private static ILocalizableString L(string name)
  51. {
  52. return new LocalizableString(name, IwbZeroConsts.LocalizationSourceName);
  53. }
  54. }
  55. }