feature:根据区域获取授权数据

This commit is contained in:
2021-04-27 10:21:25 +08:00
parent d62ca5759b
commit d93ca8b235
18 changed files with 15248 additions and 55 deletions

View 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);
}
}

View 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();
});
}
}
}

View File

@@ -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>