| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System.Collections.Generic;
- using System.Linq;
- using Abp.Authorization;
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Localization;
- using Abp.MultiTenancy;
- using WeApp.BaseInfo;
- using WeApp.Configuration;
- using IwbZero;
- namespace WeApp.Authorization
- {
- public class IwbAuthorizationProvider : AuthorizationProvider
- {
- protected readonly IIocManager IocManager;
- public IwbAuthorizationProvider(IIocManager iocManager)
- {
- IocManager = iocManager;
- }
- public override void SetPermissions(IPermissionDefinitionContext context)
- {
- using (var funRepository = IocManager.ResolveAsDisposable<IRepository<SysFunction>>())
- {
- var funs = funRepository.Object.GetAllList(a => a.IsDeleted == false);
- var topFunNo = System.Configuration.ConfigurationManager.AppSettings["SystemFunction.Top.FunctionNo"] ?? "HTSystem";
- var topFun = funs.FirstOrDefault(a => a.FunctionNo == topFunNo);
- var topPermName = topFun?.PermissionName ?? PermissionNames.Pages;
- var topPermission = context.GetPermissionOrNull(topPermName) ?? context.CreatePermission(topPermName, properties: new Dictionary<string, object>() { [IwbConsts.AuthPropertiesFunName] = topFun });
- SetChildPermissions(topPermission, funs, topFunNo);
- }
- }
- private void SetChildPermissions(Permission permission, IList<SysFunction> list, string parentNo, MultiTenancySides parentMultiTenancySide = MultiTenancySides.Tenant | MultiTenancySides.Host)
- {
- var funs = list.Where(a => a.ParentNo == parentNo).ToList();
- if (funs.Any())
- {
- foreach (var fun in funs)
- {
- permission.RemoveChildPermission(fun.PermissionName);
- var multiTenancySide = parentMultiTenancySide == MultiTenancySides.Host
- ? MultiTenancySides.Host
- : fun.Script != null && (fun.Script.ToLower().StartsWith("host") || fun.Script.ToLower().StartsWith("_host"))
- ? MultiTenancySides.Host
- : MultiTenancySides.Tenant | MultiTenancySides.Host;
- var childPermission = permission.CreateChildPermission(fun.PermissionName, L(fun.PermissionName.Replace(".", "")), multiTenancySides: multiTenancySide, properties: new Dictionary<string, object>() { [IwbConsts.AuthPropertiesFunName] = fun });
- SetChildPermissions(childPermission, list, fun.FunctionNo, multiTenancySide);
- }
- }
- }
- private static ILocalizableString L(string name)
- {
- return new LocalizableString(name, IwbZeroConsts.LocalizationSourceName);
- }
- }
- }
|