using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Abp.Authorization; using Abp.Dependency; using Abp.Runtime.Session; using Abp.Web.Authorization; using IwbZero.Authorization.Permissions; namespace ShwasherSys.ScriptManager { public class IwbAuthorizationScriptManager : IAuthorizationScriptManager, ITransientDependency { public IAbpSession AbpSession { get; set; } private readonly IIwbPermissionManager _permissionManager; public IPermissionChecker PermissionChecker { get; set; } public IwbAuthorizationScriptManager(IIwbPermissionManager permissionManager) { AbpSession = NullAbpSession.Instance; PermissionChecker = NullPermissionChecker.Instance; _permissionManager = permissionManager; } public async Task GetScriptAsync() { var allPermissionNames = _permissionManager.GetAllPermissions(false).Select(p => p.Name).ToList(); var grantedPermissionNames = new List(); if (AbpSession.UserId.HasValue) { foreach (var permissionName in allPermissionNames) { if (await PermissionChecker.IsGrantedAsync(permissionName)) { grantedPermissionNames.Add(permissionName); } } } var script = new StringBuilder(); script.AppendLine("(function(){"); script.AppendLine(); script.AppendLine(" abp.auth = abp.auth || {};"); script.AppendLine(); AppendPermissionList(script, "allPermissions", allPermissionNames); script.AppendLine(); AppendPermissionList(script, "grantedPermissions", grantedPermissionNames); script.AppendLine(); script.Append("})();"); return script.ToString(); } private static void AppendPermissionList(StringBuilder script, string name, IReadOnlyList permissions) { script.AppendLine(" abp.auth." + name + " = {"); for (var i = 0; i < permissions.Count; i++) { var permission = permissions[i]; if (i < permissions.Count - 1) { script.AppendLine(" '" + permission + "': true,"); } else { script.AppendLine(" '" + permission + "': true"); } } script.AppendLine(" };"); } } }