feature:根据区域获取授权数据
This commit is contained in:
16
Api/Ewide.Core/Service/User/ISysUserAreaService.cs
Normal file
16
Api/Ewide.Core/Service/User/ISysUserAreaService.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ewide.Core.Service.Role
|
||||
{
|
||||
public interface ISysUserAreaService
|
||||
{
|
||||
Task DeleteUserAreaListByAreaCodeList(List<string> areaCodeList);
|
||||
Task DeleteUserAreaListByUserId(string userId);
|
||||
Task<List<string>> GetUserAreaIdList(string userId);
|
||||
Task GrantData(UpdateUserInput input);
|
||||
}
|
||||
}
|
||||
64
Api/Ewide.Core/Service/User/SysUserAreaService.cs
Normal file
64
Api/Ewide.Core/Service/User/SysUserAreaService.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Ewide.Core.Entity;
|
||||
using Ewide.Core.Service.Role;
|
||||
using Furion.DatabaseAccessor;
|
||||
using Furion.DatabaseAccessor.Extensions;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ewide.Core.Service.User
|
||||
{
|
||||
public class SysUserAreaService : ISysUserAreaService
|
||||
{
|
||||
public readonly IRepository<SysUserArea> _sysUserAreaRep;
|
||||
|
||||
public SysUserAreaService(IRepository<SysUserArea> sysUserAreaRep)
|
||||
{
|
||||
_sysUserAreaRep = sysUserAreaRep;
|
||||
}
|
||||
|
||||
public async Task DeleteUserAreaListByAreaCodeList(List<string> areaCodeList)
|
||||
{
|
||||
var areaList = await _sysUserAreaRep.DetachedEntities.Where(ua => areaCodeList.Contains(ua.AreaNumberCode)).ToListAsync();
|
||||
foreach (var area in areaList)
|
||||
{
|
||||
area.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task DeleteUserAreaListByUserId(string userId)
|
||||
{
|
||||
var areaList = await _sysUserAreaRep.DetachedEntities.Where(ua => ua.SysUserId == userId).ToListAsync();
|
||||
foreach (var area in areaList)
|
||||
{
|
||||
area.Delete();
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<List<string>> GetUserAreaIdList(string userId)
|
||||
{
|
||||
return await _sysUserAreaRep.DetachedEntities.Where(ua => ua.SysUserId == userId).Select(ua => ua.AreaNumberCode).ToListAsync();
|
||||
}
|
||||
|
||||
public async Task GrantData(UpdateUserInput input)
|
||||
{
|
||||
var dataScopes = await _sysUserAreaRep.Where(u => u.SysUserId == input.Id).ToListAsync();
|
||||
dataScopes.ForEach(u =>
|
||||
{
|
||||
u.Delete();
|
||||
});
|
||||
|
||||
input.GrantAreaCodeList.ForEach(u =>
|
||||
{
|
||||
new SysUserArea
|
||||
{
|
||||
SysUserId = input.Id,
|
||||
AreaNumberCode = u
|
||||
}.Insert();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using Furion.DatabaseAccessor;
|
||||
using Ewide.Core.Entity;
|
||||
using Furion.DatabaseAccessor;
|
||||
using Furion.DatabaseAccessor.Extensions;
|
||||
using Furion.DependencyInjection;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
@@ -14,10 +15,13 @@ namespace Ewide.Core.Service
|
||||
public class SysUserDataScopeService : ISysUserDataScopeService, ITransient
|
||||
{
|
||||
private readonly IRepository<SysUserDataScope> _sysUserDataScopeRep; // 用户数据范围表仓储
|
||||
|
||||
public SysUserDataScopeService(IRepository<SysUserDataScope> sysUserDataScopeRep)
|
||||
private readonly IRepository<SysUserArea> _sysUserAreaRep;
|
||||
private readonly ISysOrgService _sysOrgService;
|
||||
public SysUserDataScopeService(IRepository<SysUserDataScope> sysUserDataScopeRep, IRepository<SysUserArea> sysUserAreaRep, ISysOrgService sysOrgService)
|
||||
{
|
||||
_sysUserDataScopeRep = sysUserDataScopeRep;
|
||||
_sysUserAreaRep = sysUserAreaRep;
|
||||
_sysOrgService = sysOrgService;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -51,9 +55,18 @@ namespace Ewide.Core.Service
|
||||
/// <returns></returns>
|
||||
public async Task<List<string>> GetUserDataScopeIdList(string userId)
|
||||
{
|
||||
return await _sysUserDataScopeRep.DetachedEntities
|
||||
var areaList = await _sysUserAreaRep.DetachedEntities.Where(u => u.SysUserId == userId).Select(u => u.AreaNumberCode).ToListAsync();
|
||||
//用户自定义的区域权限所对应的全部组织机构id
|
||||
List<string> areaDataScopeIdList = new List<string>();
|
||||
foreach (var areaNumberCode in areaList)
|
||||
{
|
||||
areaDataScopeIdList.AddRange(await _sysOrgService.GetAreaDataScopeIdListWithoutChildrenArea(areaNumberCode));
|
||||
}
|
||||
//用户自定义的组织权限
|
||||
var orgIdList = await _sysUserDataScopeRep.DetachedEntities
|
||||
.Where(u => u.SysUserId == userId)
|
||||
.Select(u => u.SysOrgId).ToListAsync();
|
||||
return areaDataScopeIdList.Concat(orgIdList).Distinct().ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user