DataPermissionManager.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using Abp.Dependency;
  5. using Abp.Domain.Repositories;
  6. using Abp.Runtime.Caching;
  7. using IwbZero.Authorization.Base.Permissions;
  8. using IwbZero.Runtime.Caching;
  9. using IwbZero.Runtime.Session;
  10. namespace IwbZero.Authorization.Permissions
  11. {
  12. public class DataPermissionManager : ISingletonDependency
  13. {
  14. public DataPermissionManager(IRepository<DataPermission, long> repository, IIwbSession abpSession, ICacheManager cacheManager)
  15. {
  16. Repository = repository;
  17. AbpSession = abpSession;
  18. CacheManager = cacheManager;
  19. }
  20. protected IRepository<DataPermission, long> Repository { get; }
  21. protected IIwbSession AbpSession { get; }
  22. protected ICacheManager CacheManager { get; }
  23. public virtual async Task AuthDataPermission(DataPermissionAuthDto input)
  24. {
  25. foreach (var type in input.OperTypes)
  26. {
  27. if (input.UserIds != null && input.UserIds.Any())
  28. {
  29. var entities = await Repository.GetAllListAsync(a =>
  30. a.Name == input.PermissionName && a.Access == type && a.AccessValue == input.Key && a.Master == 1);
  31. foreach (var id in input.UserIds)
  32. {
  33. var entity = entities.FirstOrDefault(a => a.MasterValue == id);
  34. if (entity == null)
  35. {
  36. await Repository.InsertAsync(new DataPermission()
  37. {
  38. Name = input.PermissionName,
  39. Master = 1,
  40. MasterValue = id,
  41. Access = type,
  42. AccessValue = input.Key,
  43. IsGranted = true
  44. });
  45. }
  46. else
  47. {
  48. if (!entity.IsGranted)
  49. {
  50. entity.IsGranted = true;
  51. await Repository.UpdateAsync(entity);
  52. }
  53. entities.Remove(entity);
  54. }
  55. var cacheKey = $"Data-{id}@{AbpSession.TenantId ?? 0}";
  56. await CacheManager.GetUserPermissionCache().RemoveAsync(cacheKey);
  57. }
  58. if (entities.Any())
  59. {
  60. foreach (var entity in entities)
  61. {
  62. await Repository.DeleteAsync(entity);
  63. }
  64. }
  65. }
  66. if (input.RoleIds != null && input.RoleIds.Any())
  67. {
  68. var entities = await Repository.GetAllListAsync(a =>
  69. a.Name == input.PermissionName && a.Access == type && a.AccessValue == input.Key && a.Master == 2);
  70. foreach (var id in input.RoleIds)
  71. {
  72. var cacheKey = $"Data-{id}@{AbpSession.TenantId ?? 0}";
  73. await CacheManager.GetRolePermissionCache().RemoveAsync(cacheKey);
  74. var entity = entities.FirstOrDefault(a => a.MasterValue == id);
  75. if (entity == null)
  76. {
  77. await Repository.InsertAsync(new DataPermission()
  78. {
  79. Name = input.PermissionName,
  80. Master = 2,
  81. MasterValue = id,
  82. Access = type,
  83. AccessValue = input.Key,
  84. IsGranted = true
  85. });
  86. }
  87. else
  88. {
  89. if (!entity.IsGranted)
  90. {
  91. entity.IsGranted = true;
  92. await Repository.UpdateAsync(entity);
  93. }
  94. entities.Remove(entity);
  95. }
  96. }
  97. if (entities.Any())
  98. {
  99. foreach (var entity in entities)
  100. {
  101. await Repository.DeleteAsync(entity);
  102. }
  103. }
  104. }
  105. }
  106. }
  107. public virtual async Task AuthUserDataPermission(string permissionName, string key, List<int> operTypes, List<string> userIds)
  108. {
  109. foreach (var type in operTypes)
  110. {
  111. var entities = await Repository.GetAllListAsync(a =>
  112. a.Name == permissionName && a.Access == type && a.AccessValue == key && a.Master == 1);
  113. foreach (var id in userIds)
  114. {
  115. var entity = entities.FirstOrDefault(a => a.MasterValue == id);
  116. if (entity == null)
  117. {
  118. await Repository.InsertAsync(new DataPermission()
  119. {
  120. Name = permissionName,
  121. Master = 1,
  122. MasterValue = id,
  123. Access = type,
  124. AccessValue = key,
  125. IsGranted = true
  126. });
  127. }
  128. else
  129. {
  130. if (!entity.IsGranted)
  131. {
  132. entity.IsGranted = true;
  133. await Repository.UpdateAsync(entity);
  134. }
  135. entities.Remove(entity);
  136. }
  137. }
  138. if (entities.Any())
  139. {
  140. foreach (var entity in entities)
  141. {
  142. await Repository.DeleteAsync(entity);
  143. }
  144. }
  145. }
  146. }
  147. public virtual async Task AuthRoleDataPermission(string permissionName, string key, List<int> operTypes, List<string> roleIds)
  148. {
  149. foreach (var type in operTypes)
  150. {
  151. var entities = await Repository.GetAllListAsync(a =>
  152. a.Name == permissionName && a.Access == type && a.AccessValue == key && a.Master == 2);
  153. foreach (var id in roleIds)
  154. {
  155. var entity = entities.FirstOrDefault(a => a.MasterValue == id);
  156. if (entity == null)
  157. {
  158. await Repository.InsertAsync(new DataPermission()
  159. {
  160. Name = permissionName,
  161. Master = 2,
  162. MasterValue = id,
  163. Access = type,
  164. AccessValue = key,
  165. IsGranted = true
  166. });
  167. }
  168. else
  169. {
  170. if (!entity.IsGranted)
  171. {
  172. entity.IsGranted = true;
  173. await Repository.UpdateAsync(entity);
  174. }
  175. entities.Remove(entity);
  176. }
  177. }
  178. if (entities.Any())
  179. {
  180. foreach (var entity in entities)
  181. {
  182. await Repository.DeleteAsync(entity);
  183. }
  184. }
  185. }
  186. }
  187. }
  188. }