AuthorizationScriptManager.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using System.Threading.Tasks;
  5. using Abp.Authorization;
  6. using Abp.Dependency;
  7. using Abp.Runtime.Session;
  8. namespace Abp.Web.Authorization
  9. {
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. public class AuthorizationScriptManager : IAuthorizationScriptManager, ITransientDependency
  14. {
  15. /// <inheritdoc/>
  16. public IAbpSession AbpSession { get; set; }
  17. private readonly IPermissionManager _permissionManager;
  18. public IPermissionChecker PermissionChecker { get; set; }
  19. /// <inheritdoc/>
  20. public AuthorizationScriptManager(IPermissionManager permissionManager)
  21. {
  22. AbpSession = NullAbpSession.Instance;
  23. PermissionChecker = NullPermissionChecker.Instance;
  24. _permissionManager = permissionManager;
  25. }
  26. /// <inheritdoc/>
  27. public async Task<string> GetScriptAsync()
  28. {
  29. var allPermissionNames = _permissionManager.GetAllPermissions(false).Select(p => p.Name).ToList();
  30. var grantedPermissionNames = new List<string>();
  31. if (AbpSession.UserId.HasValue)
  32. {
  33. foreach (var permissionName in allPermissionNames)
  34. {
  35. if (await PermissionChecker.IsGrantedAsync(permissionName))
  36. {
  37. grantedPermissionNames.Add(permissionName);
  38. }
  39. }
  40. }
  41. var script = new StringBuilder();
  42. script.AppendLine("(function(){");
  43. script.AppendLine();
  44. script.AppendLine(" abp.auth = abp.auth || {};");
  45. script.AppendLine();
  46. AppendPermissionList(script, "allPermissions", allPermissionNames);
  47. script.AppendLine();
  48. AppendPermissionList(script, "grantedPermissions", grantedPermissionNames);
  49. script.AppendLine();
  50. script.Append("})();");
  51. return script.ToString();
  52. }
  53. private static void AppendPermissionList(StringBuilder script, string name, IReadOnlyList<string> permissions)
  54. {
  55. script.AppendLine(" abp.auth." + name + " = {");
  56. for (var i = 0; i < permissions.Count; i++)
  57. {
  58. var permission = permissions[i];
  59. if (i < permissions.Count - 1)
  60. {
  61. script.AppendLine(" '" + permission + "': true,");
  62. }
  63. else
  64. {
  65. script.AppendLine(" '" + permission + "': true");
  66. }
  67. }
  68. script.AppendLine(" };");
  69. }
  70. }
  71. }