|
@@ -4,6 +4,7 @@ using Admin.Core.Common.Cache;
|
|
|
using Admin.Core.Common.Configs;
|
|
|
using Admin.Core.Common.Output;
|
|
|
using Admin.Core.Model.Admin;
|
|
|
+using Admin.Core.Repository;
|
|
|
using Admin.Core.Repository.Admin;
|
|
|
using Admin.Core.Service.Admin.Permission.Input;
|
|
|
using Admin.Core.Service.Admin.Permission.Output;
|
|
@@ -20,21 +21,24 @@ namespace Admin.Core.Service.Admin.Permission
|
|
|
private readonly IPermissionRepository _permissionRepository;
|
|
|
private readonly IRoleRepository _roleRepository;
|
|
|
private readonly IRolePermissionRepository _rolePermissionRepository;
|
|
|
- private readonly ITenantRepository _tenantRepository;
|
|
|
+ private readonly IRepositoryBase<TenantPermissionEntity> _tenantPermissionRepository;
|
|
|
+ private readonly IUserRepository _userRepository;
|
|
|
|
|
|
public PermissionService(
|
|
|
AppConfig appConfig,
|
|
|
IPermissionRepository permissionRepository,
|
|
|
IRoleRepository roleRepository,
|
|
|
IRolePermissionRepository rolePermissionRepository,
|
|
|
- ITenantRepository tenantRepository
|
|
|
+ IRepositoryBase<TenantPermissionEntity> tenantPermissionRepository,
|
|
|
+ IUserRepository userRepository
|
|
|
)
|
|
|
{
|
|
|
_appConfig = appConfig;
|
|
|
_permissionRepository = permissionRepository;
|
|
|
_roleRepository = roleRepository;
|
|
|
_rolePermissionRepository = rolePermissionRepository;
|
|
|
- _tenantRepository = tenantRepository;
|
|
|
+ _tenantPermissionRepository = tenantPermissionRepository;
|
|
|
+ _userRepository = userRepository;
|
|
|
}
|
|
|
|
|
|
public async Task<IResponseOutput> GetAsync(long id)
|
|
@@ -228,14 +232,54 @@ namespace Admin.Core.Service.Admin.Permission
|
|
|
return ResponseOutput.Ok();
|
|
|
}
|
|
|
|
|
|
+ [Transaction]
|
|
|
+ public async Task<IResponseOutput> SaveTenantPermissionsAsync(PermissionSaveTenantPermissionsInput input)
|
|
|
+ {
|
|
|
+ //查询租户权限
|
|
|
+ var permissionIds = await _tenantPermissionRepository.Select.Where(d => d.TenantId == input.TenantId).ToListAsync(m => m.PermissionId);
|
|
|
+
|
|
|
+ //批量删除租户权限
|
|
|
+ var deleteIds = permissionIds.Where(d => !input.PermissionIds.Contains(d));
|
|
|
+ if (deleteIds.Count() > 0)
|
|
|
+ {
|
|
|
+ await _tenantPermissionRepository.DeleteAsync(m => m.TenantId == input.TenantId && deleteIds.Contains(m.PermissionId));
|
|
|
+ }
|
|
|
+
|
|
|
+ //批量插入租户权限
|
|
|
+ var tenatPermissions = new List<TenantPermissionEntity>();
|
|
|
+ var insertPermissionIds = input.PermissionIds.Where(d => !permissionIds.Contains(d));
|
|
|
+ if (insertPermissionIds.Count() > 0)
|
|
|
+ {
|
|
|
+ foreach (var permissionId in insertPermissionIds)
|
|
|
+ {
|
|
|
+ tenatPermissions.Add(new TenantPermissionEntity()
|
|
|
+ {
|
|
|
+ TenantId = input.TenantId,
|
|
|
+ PermissionId = permissionId,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ await _tenantPermissionRepository.InsertAsync(tenatPermissions);
|
|
|
+ }
|
|
|
+
|
|
|
+ //清除租户下所有用户权限
|
|
|
+ if (_appConfig.Tenant)
|
|
|
+ {
|
|
|
+ var userIds = await _userRepository.Select.Where(a => a.TenantId == input.TenantId).ToListAsync(a => a.Id);
|
|
|
+ foreach(var userId in userIds)
|
|
|
+ {
|
|
|
+ await Cache.DelAsync(string.Format(CacheKey.UserPermissions, userId));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return ResponseOutput.Ok();
|
|
|
+ }
|
|
|
+
|
|
|
public async Task<IResponseOutput> GetPermissionList()
|
|
|
{
|
|
|
var permissions = await _permissionRepository.Select
|
|
|
- .WhereIf(_appConfig.Tenant && User.TenantType == TenantType.Tenant && User.DataIsolationType == DataIsolationType.Share, a =>
|
|
|
- _permissionRepository.Orm.Select<RolePermissionEntity>()
|
|
|
- .InnerJoin<TenantEntity>((b, c) => b.RoleId == c.RoleId && c.Id == User.TenantId)
|
|
|
- .DisableGlobalFilter("Tenant")
|
|
|
- .Where(b => b.PermissionId == a.Id)
|
|
|
+ .WhereIf(_appConfig.Tenant && User.TenantType == TenantType.Tenant, a =>
|
|
|
+ _permissionRepository.Orm.Select<TenantPermissionEntity>()
|
|
|
+ .Where(b => b.PermissionId == a.Id && b.TenantId == User.TenantId)
|
|
|
.Any()
|
|
|
)
|
|
|
.OrderBy(a => a.ParentId)
|
|
@@ -267,5 +311,14 @@ namespace Admin.Core.Service.Admin.Permission
|
|
|
|
|
|
return ResponseOutput.Ok(permissionIds);
|
|
|
}
|
|
|
+
|
|
|
+ public async Task<IResponseOutput> GetTenantPermissionList(long tenantId)
|
|
|
+ {
|
|
|
+ var permissionIds = await _tenantPermissionRepository
|
|
|
+ .Select.Where(d => d.TenantId == tenantId)
|
|
|
+ .ToListAsync(a => a.PermissionId);
|
|
|
+
|
|
|
+ return ResponseOutput.Ok(permissionIds);
|
|
|
+ }
|
|
|
}
|
|
|
}
|