Merge pull request 'features/area_data_scope 添加根据区域授权用户数据' (#1) from features/area_data_scope into master

Reviewed-on: http://home.bobandjuly.cyou:5100/ewide/ewide_core/pulls/1
ok
This commit is contained in:
2021-04-27 11:25:52 +08:00
23 changed files with 22497 additions and 58 deletions

View File

@@ -40,5 +40,28 @@ namespace Ewide.Core.Entity
[Comment("排序")]
public int Sort { get; set; }
/// <summary>
/// 多个区域有多个用户绑定自定义数据
/// </summary>
public ICollection<SysUser> SysUsers { get; set; }
/// <summary>
/// 中间表
/// </summary>
public List<SysUserArea> SysUserAreas { get; set; }
/// <summary>
/// 多个区域有多个角色绑定权限数据
/// </summary>
public ICollection<SysRole> SysRoles { get; set; }
/// <summary>
/// 中间表
/// </summary>
public List<SysRoleArea> SysRoleAreas { get; set; }
/// <summary>
/// 一个区域有多个组织
/// </summary>
public ICollection<SysOrg> SysOrgs { get; set; }
}
}

View File

@@ -1,4 +1,5 @@
using Furion.DatabaseAccessor;
using Ewide.Core.Entity;
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
@@ -70,6 +71,10 @@ namespace Ewide.Core
/// </summary>
public List<SysRoleDataScope> SysRoleDataScopes { get; set; }
public ICollection<AreaNumber> AreaNumbers { get; set; }
public List<SysRoleArea> SysRoleAreas { get; set; }
/// <summary>
/// 多对多(菜单)
/// </summary>
@@ -97,7 +102,15 @@ namespace Ewide.Core
{
u.HasKey(c => new { c.SysRoleId, c.SysOrgId });
});
entityBuilder.HasMany(p => p.AreaNumbers)
.WithMany(p => p.SysRoles)
.UsingEntity<SysRoleArea>(
u => u.HasOne(c => c.AreaNumber).WithMany(c => c.SysRoleAreas).HasForeignKey(c => c.AreaNumberCode),
u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleAreas).HasForeignKey(c => c.SysRoleId),
u =>
{
u.HasKey(c => new { c.SysRoleId, c.AreaNumberCode });
});
entityBuilder.HasMany(p => p.SysMenus)
.WithMany(p => p.SysRoles)
.UsingEntity<SysRoleMenu>(

View File

@@ -1,4 +1,5 @@
using Furion.DatabaseAccessor;
using Ewide.Core.Entity;
using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
@@ -127,6 +128,11 @@ namespace Ewide.Core
/// </summary>
public List<SysUserDataScope> SysUserDataScopes { get; set; }
public ICollection<AreaNumber> AreaNumbers { get; set; }
/// <summary>
/// 多对多中间表(用户-区域 数据范围)
/// </summary>
public List<SysUserArea> SysUserAreas { get; set; }
/// <summary>
/// 配置多对多关系
/// </summary>
@@ -150,6 +156,13 @@ namespace Ewide.Core
{
u.HasKey(c => new { c.SysUserId, c.SysOrgId });
});
entityBuilder.HasMany(p => p.AreaNumbers).WithMany(p => p.SysUsers).UsingEntity<SysUserArea>(
u => u.HasOne(c => c.AreaNumber).WithMany(c => c.SysUserAreas).HasForeignKey(c => c.AreaNumberCode),
u => u.HasOne(c => c.SysUser).WithMany(c => c.SysUserAreas).HasForeignKey(c => c.SysUserId),
u =>
{
u.HasKey(c => new { c.SysUserId, c.AreaNumberCode });
});
}
}
}

View File

@@ -303,6 +303,41 @@
验证码缓存
</summary>
</member>
<member name="P:Ewide.Core.Entity.AreaNumber.SysUsers">
<summary>
多个区域有多个用户绑定自定义数据
</summary>
</member>
<member name="P:Ewide.Core.Entity.AreaNumber.SysUserAreas">
<summary>
中间表
</summary>
</member>
<member name="P:Ewide.Core.Entity.AreaNumber.SysRoles">
<summary>
多个区域有多个角色绑定权限数据
</summary>
</member>
<member name="P:Ewide.Core.Entity.AreaNumber.SysRoleAreas">
<summary>
中间表
</summary>
</member>
<member name="P:Ewide.Core.Entity.AreaNumber.SysOrgs">
<summary>
一个区域有多个组织
</summary>
</member>
<member name="P:Ewide.Core.Entity.SysRoleArea.SysRoleId">
<summary>
角色Id
</summary>
</member>
<member name="P:Ewide.Core.Entity.SysUserArea.SysUserId">
<summary>
用户Id
</summary>
</member>
<member name="T:Ewide.Core.DEntityBase">
<summary>
自定义实体基类
@@ -1057,6 +1092,11 @@
备注
</summary>
</member>
<member name="P:Ewide.Core.SysMenu.UnbindParent">
<summary>
不关联上级菜单显示 0标识关联 1表示不需要关联菜单 仅按钮有效
</summary>
</member>
<member name="P:Ewide.Core.SysMenu.Status">
<summary>
状态(字典 0正常 1停用 2删除
@@ -1267,6 +1307,11 @@
状态(字典 0正常 1停用 2删除
</summary>
</member>
<member name="P:Ewide.Core.SysOrg.AreaNumber">
<summary>
一对一 一个组织对应一个区域代码
</summary>
</member>
<member name="P:Ewide.Core.SysOrg.SysUsers">
<summary>
多对多(用户)
@@ -1663,6 +1708,11 @@
多对多中间表(用户-机构 数据范围)
</summary>
</member>
<member name="P:Ewide.Core.SysUser.SysUserAreas">
<summary>
多对多中间表(用户-区域 数据范围)
</summary>
</member>
<member name="M:Ewide.Core.SysUser.Configure(Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder{Ewide.Core.SysUser},Microsoft.EntityFrameworkCore.DbContext,System.Type)">
<summary>
配置多对多关系
@@ -1781,6 +1831,16 @@
自定义数据
</summary>
</member>
<member name="F:Ewide.Core.DataScopeType.AREA_WITH_CHILD">
<summary>
本部门所在区域及以下区域
</summary>
</member>
<member name="F:Ewide.Core.DataScopeType.AREA">
<summary>
本部门所在区域数据 不包括下面区域
</summary>
</member>
<member name="T:Ewide.Core.ErrorCode">
<summary>
系统错误码
@@ -2402,6 +2462,11 @@
授权数据
</summary>
</member>
<member name="P:Ewide.Core.XnInputBase.GrantAreaCodeList">
<summary>
授权区域
</summary>
</member>
<member name="T:Ewide.Core.PageInputBase">
<summary>
通用分页输入参数
@@ -4849,6 +4914,11 @@
备注
</summary>
</member>
<member name="P:Ewide.Core.Service.MenuInput.UnbindParent">
<summary>
不绑定上级菜单
</summary>
</member>
<member name="P:Ewide.Core.Service.AddMenuInput.Type">
<summary>
菜单类型(字典 0目录 1菜单 2按钮
@@ -5473,6 +5543,21 @@
上一级Id
</summary>
</member>
<member name="M:Ewide.Core.Service.ISysOrgService.GetAreaDataScopeIdList(System.Int32,System.String)">
<summary>
根据区域信息获取单位id
</summary>
<param name="dataScopeType">代表区域范围的类型</param>
<param name="areaNumberCode">区域代码</param>
<returns></returns>
</member>
<member name="M:Ewide.Core.Service.ISysOrgService.GetAreaDataScopeIdListWithoutChildrenArea(System.String)">
<summary>
当前区域信息不包括子区域
</summary>
<param name="areaNumberCode">区域代码</param>
<returns></returns>
</member>
<member name="T:Ewide.Core.Service.SysOrgService">
<summary>
组织机构服务

View File

@@ -21,6 +21,10 @@ namespace Ewide.Core
/// 授权数据
/// </summary>
public virtual List<string> GrantOrgIdList { get; set; } = new List<string>();
/// <summary>
/// 授权区域
/// </summary>
public virtual List<string> GrantAreaCodeList { get; set; } = new List<string>();
}
/// <summary>

View File

@@ -0,0 +1,52 @@
using Ewide.Core.Entity;
using Ewide.Core.Service.Area.Dto;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Mapster;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Service.Area
{
public class AreaNumberService : IAreaNumberService, ITransient
{
private readonly IRepository<AreaNumber> _areaNumberRep;
private readonly ISysCacheService _sysCacheService;
public AreaNumberService(IRepository<AreaNumber> areaNumberRep, ISysCacheService sysCacheService)
{
_areaNumberRep = areaNumberRep;
_sysCacheService = sysCacheService;
}
public async Task AddAreaNumber(AreaNumberInput input)
{
await _areaNumberRep.InsertAsync(input.Adapt<AreaNumber>());
}
public async Task DeleteAreaNumber(DeleteAreaNumberInput input)
{
var areaNumber= await _areaNumberRep.FirstOrDefaultAsync(p=>p.Code==input.Code);
await areaNumber.DeleteAsync();
}
public async Task<AreaNumber> GetAreaNumber(string code)
{
return await _areaNumberRep.DetachedEntities.FirstOrDefaultAsync(a => a.Code == code);
}
public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code)
{
return await _areaNumberRep.DetachedEntities.Where(a => a.Code.StartsWith(code)).ToListAsync();
}
public async Task UpdateAreaNumber(AreaNumberInput input)
{
await _areaNumberRep.UpdateAsync(input.Adapt<AreaNumber>());
}
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Service.Area.Dto
{
public class AreaNumberInput
{
public string Code { get; set; }
public string ShowCode { get; set; }
public string Name { get; set; }
public int LevelType { get; set; }
public string Note { get; set; }
public int Sort { get; set; }
}
public class DeleteAreaNumberInput
{
[Required(ErrorMessage ="区域代码不可为空")]
public string Code { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using Ewide.Core.Entity;
using Ewide.Core.Service.Area.Dto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Service.Area
{
public interface IAreaNumberService
{
Task AddAreaNumber(AreaNumberInput input);
Task DeleteAreaNumber(DeleteAreaNumberInput input);
Task UpdateAreaNumber(AreaNumberInput input);
Task<AreaNumber> GetAreaNumber(string code);
Task<List<AreaNumber>> GetAreaNumberWithChildren(string code);
}
}

View File

@@ -18,9 +18,10 @@ namespace Ewide.Core.Service
/// <summary>
/// 根据区域信息获取单位id
/// </summary>
/// <param name="dataScopeType">代表区域范围的类型</param>
/// <param name="areaNumberCode">区域代码</param>
/// <returns></returns>
Task<List<string>> GetAreaDataScopeIdList(string areaNumberCode);
Task<List<string>> GetAreaDataScopeIdList(int dataScopeType,string areaNumberCode);
/// <summary>
/// 当前区域信息不包括子区域
/// </summary>

View File

@@ -346,11 +346,15 @@ namespace Ewide.Core.Service
return await App.GetService<ISysUserService>().GetUserDataScopeIdList();
}
public async Task<List<string>> GetAreaDataScopeIdList(string areaNumberCode)
public async Task<List<string>> GetAreaDataScopeIdList(int dataScopeType, string orgId)
{
return await _sysOrgRep.DetachedEntities.Where(p => p.AreaNumberCode.StartsWith(areaNumberCode)).Select(p=>p.Id).ToListAsync();
var org = await _sysOrgRep.FirstOrDefaultAsync(o => o.Id == orgId);
if (dataScopeType == (int)DataScopeType.AREA_WITH_CHILD)
return await _sysOrgRep.DetachedEntities.Where(p => p.AreaNumberCode.StartsWith(org.Code)).Select(p => p.Id).ToListAsync();
if (dataScopeType == (int)DataScopeType.AREA)
return await _sysOrgRep.DetachedEntities.Where(p => p.AreaNumberCode == org.Code).Select(p => p.Id).ToListAsync();
return new List<string>();
}
public async Task<List<string>> GetAreaDataScopeIdListWithoutChildrenArea(string areaNumberCode)
{
return await _sysOrgRep.DetachedEntities.Where(p => p.AreaNumberCode == areaNumberCode).Select(p => p.Id).ToListAsync();

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 ISysRoleAreaService
{
Task DeleteRoleAreaListByAreaCodeList(List<string> areaCodeList);
Task DeleteRoleAreaListByRoleId(string roleId);
Task<List<string>> GetRoleAreaCodeList(List<string> roleIdList);
Task GrantArea(UpdateRoleInput input);
}
}

View File

@@ -0,0 +1,66 @@
using Ewide.Core.Entity;
using Ewide.Core.Service.User;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ewide.Core.Service.Role
{
public class SysRoleAreaService : ISysRoleAreaService,ITransient
{
public readonly IRepository<SysRoleArea> _sysRoleAreaRep;
public SysRoleAreaService(IRepository<SysRoleArea> sysRolleAreaRep)
{
_sysRoleAreaRep = sysRolleAreaRep;
}
public async Task DeleteRoleAreaListByAreaCodeList(List<string> areaCodeList)
{
var dataScopes = await _sysRoleAreaRep.DetachedEntities.Where(u => areaCodeList.Contains(u.AreaNumberCode)).ToListAsync();
dataScopes.ForEach(u =>
{
u.Delete();
});
}
public async Task DeleteRoleAreaListByRoleId(string roleId)
{
var dataScopes = await _sysRoleAreaRep.DetachedEntities.Where(u => roleId==u.SysRoleId).ToListAsync();
dataScopes.ForEach(u =>
{
u.Delete();
});
}
public async Task<List<string>> GetRoleAreaCodeList(List<string> roleIdList)
{
return await _sysRoleAreaRep.DetachedEntities.Where(u => roleIdList.Contains(u.SysRoleId)).Select(u=>u.AreaNumberCode).Distinct().ToListAsync();
}
public async Task GrantArea(UpdateRoleInput input)
{
var dataScopes = await _sysRoleAreaRep.Where(u => u.SysRoleId == input.Id).ToListAsync();
dataScopes.ForEach(u =>
{
u.Delete();
});
input.GrantAreaCodeList.ForEach(u =>
{
new SysRoleArea
{
SysRoleId = input.Id,
AreaNumberCode = u
}.Insert();
});
}
}
}

View File

@@ -243,6 +243,7 @@ namespace Ewide.Core.Service
{
// 定义角色中最大数据范围的类型目前按最大范围策略来如果你同时拥有ALL和SELF的权限最后按ALL返回
int strongerDataScopeType = (int)DataScopeType.SELF;
int strongerAreaType = (int)DataScopeType.SELF;
var customDataScopeRoleIdList = new List<string>();
if (roleIdList != null && roleIdList.Count > 0)
@@ -252,6 +253,10 @@ namespace Ewide.Core.Service
{
if (u.DataScopeType == (int)DataScopeType.DEFINE)
customDataScopeRoleIdList.Add(u.Id);
if ((u.DataScopeType == (int)DataScopeType.AREA || u.DataScopeType == (int)DataScopeType.AREA_WITH_CHILD) && strongerAreaType < u.DataScopeType)
{
strongerDataScopeType = u.DataScopeType;
}
else if (u.DataScopeType <= strongerDataScopeType)
strongerDataScopeType = u.DataScopeType;
});
@@ -262,8 +267,9 @@ namespace Ewide.Core.Service
// 角色中拥有最大数据范围类型的数据范围
var dataScopeIdList = await _sysOrgService.GetDataScopeListByDataScopeType(strongerDataScopeType, orgId);
return roleDataScopeIdList.Concat(dataScopeIdList).Distinct().ToList(); //并集
//角色区域数据范围
var areaOrgIdList = await _sysOrgService.GetAreaDataScopeIdList(strongerAreaType, orgId);
return roleDataScopeIdList.Concat(dataScopeIdList).Concat(areaOrgIdList).Distinct().ToList(); //并集
}
/// <summary>

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,65 @@
using Ewide.Core.Entity;
using Ewide.Core.Service.Role;
using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
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,ITransient
{
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 IRepository<SysOrg> _sysOrgRep;
public SysUserDataScopeService(IRepository<SysUserDataScope> sysUserDataScopeRep, IRepository<SysUserArea> sysUserAreaRep, IRepository<SysOrg> sysOrgRep)
{
_sysUserDataScopeRep = sysUserDataScopeRep;
_sysUserAreaRep = sysUserAreaRep;
_sysOrgRep = sysOrgRep;
}
/// <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 _sysOrgRep.DetachedEntities.Where(p => p.AreaNumberCode == areaNumberCode).Select(p => p.Id).ToListAsync());
}
//用户自定义的组织权限
var orgIdList = await _sysUserDataScopeRep.DetachedEntities
.Where(u => u.SysUserId == userId)
.Select(u => u.SysOrgId).ToListAsync();
return areaDataScopeIdList.Concat(orgIdList).Distinct().ToList();
}
/// <summary>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Ewide.Database.Migrations.Migrations
{
public partial class addAreaNumberRelation : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "AreaNumberCode",
table: "sys_org",
type: "varchar(10) CHARACTER SET utf8mb4",
nullable: true,
comment: "组织所在区域代码");
migrationBuilder.AddColumn<int>(
name: "UnbindParent",
table: "sys_menu",
type: "int",
nullable: false,
defaultValue: 0,
comment: "不关联菜单显示");
migrationBuilder.CreateIndex(
name: "IX_sys_org_AreaNumberCode",
table: "sys_org",
column: "AreaNumberCode");
migrationBuilder.AddForeignKey(
name: "FK_sys_org_ewide_area_number_AreaNumberCode",
table: "sys_org",
column: "AreaNumberCode",
principalTable: "ewide_area_number",
principalColumn: "Code",
onDelete: ReferentialAction.Restrict);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "FK_sys_org_ewide_area_number_AreaNumberCode",
table: "sys_org");
migrationBuilder.DropIndex(
name: "IX_sys_org_AreaNumberCode",
table: "sys_org");
migrationBuilder.DropColumn(
name: "AreaNumberCode",
table: "sys_org");
migrationBuilder.DropColumn(
name: "UnbindParent",
table: "sys_menu");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,79 @@
using Microsoft.EntityFrameworkCore.Migrations;
namespace Ewide.Database.Migrations.Migrations
{
public partial class areaCodemanytomany : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "sys_role_area",
columns: table => new
{
SysRoleId = table.Column<string>(type: "varchar(36)", nullable: false, comment: "角色Id"),
AreaNumberCode = table.Column<string>(type: "varchar(10) CHARACTER SET utf8mb4", maxLength: 10, nullable: false, comment: "系统使用的区域代码")
},
constraints: table =>
{
table.PrimaryKey("PK_sys_role_area", x => new { x.SysRoleId, x.AreaNumberCode });
table.ForeignKey(
name: "FK_sys_role_area_ewide_area_number_AreaNumberCode",
column: x => x.AreaNumberCode,
principalTable: "ewide_area_number",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_sys_role_area_sys_role_SysRoleId",
column: x => x.SysRoleId,
principalTable: "sys_role",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
},
comment: "角色区域自定义数据");
migrationBuilder.CreateTable(
name: "sys_user_area",
columns: table => new
{
SysUserId = table.Column<string>(type: "varchar(36)", nullable: false, comment: "用户Id"),
AreaNumberCode = table.Column<string>(type: "varchar(10) CHARACTER SET utf8mb4", maxLength: 10, nullable: false, comment: "系统使用的区域代码")
},
constraints: table =>
{
table.PrimaryKey("PK_sys_user_area", x => new { x.SysUserId, x.AreaNumberCode });
table.ForeignKey(
name: "FK_sys_user_area_ewide_area_number_AreaNumberCode",
column: x => x.AreaNumberCode,
principalTable: "ewide_area_number",
principalColumn: "Code",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_sys_user_area_sys_user_SysUserId",
column: x => x.SysUserId,
principalTable: "sys_user",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
},
comment: "用户授权区域信息");
migrationBuilder.CreateIndex(
name: "IX_sys_role_area_AreaNumberCode",
table: "sys_role_area",
column: "AreaNumberCode");
migrationBuilder.CreateIndex(
name: "IX_sys_user_area_AreaNumberCode",
table: "sys_user_area",
column: "AreaNumberCode");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "sys_role_area");
migrationBuilder.DropTable(
name: "sys_user_area");
}
}
}