using Furion.DatabaseAccessor;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace iWare.Wms.Core
{
///
/// 角色表
///
[Table("sys_role")]
[Comment("角色表")]
public class SysRole : DEntityBase, IEntityTypeBuilder
{
///
/// 名称
///
[Comment("名称")]
[Required, MaxLength(20)]
public string Name { get; set; }
///
/// 编码
///
[Comment("编码")]
[Required, MaxLength(50)]
public string Code { get; set; }
///
/// 排序
///
[Comment("排序")]
public int Sort { get; set; }
///
/// 数据范围类型(字典 1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据 5自定义数据)
///
[Comment("数据范围类型")]
public DataScopeType DataScopeType { get; set; }
///
/// 备注
///
[Comment("备注")]
[MaxLength(100)]
public string Remark { get; set; }
///
/// 状态(字典 0正常 1停用 2删除)
///
[Comment("状态")]
public CommonStatus Status { get; set; } = CommonStatus.ENABLE;
///
/// 角色类型-集团角色_0、加盟商角色_1、门店角色_2
///
[Comment("角色类型-集团角色_0、加盟商角色_1、门店角色_2")]
public RoleTypeEnum RoleType { get; set; }
///
/// 多对多(用户)
///
public ICollection SysUsers { get; set; }
///
/// 多对多中间表(用户角色)
///
public List SysUserRoles { get; set; }
///
/// 多对多(机构)
///
public ICollection SysOrgs { get; set; }
///
/// 多对多中间表(角色-机构 数据范围)
///
public List SysRoleDataScopes { get; set; }
///
/// 多对多(菜单)
///
public ICollection SysMenus { get; set; }
///
/// 多对多中间表(角色-菜单)
///
public List SysRoleMenus { get; set; }
///
/// 配置多对多关系
///
///
///
///
public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator)
{
entityBuilder.HasMany(p => p.SysOrgs)
.WithMany(p => p.SysRoles)
.UsingEntity(
u => u.HasOne(c => c.SysOrg).WithMany(c => c.SysRoleDataScopes).HasForeignKey(c => c.SysOrgId),
u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleDataScopes).HasForeignKey(c => c.SysRoleId),
u =>
{
u.HasKey(c => new { c.SysRoleId, c.SysOrgId });
});
entityBuilder.HasMany(p => p.SysMenus)
.WithMany(p => p.SysRoles)
.UsingEntity(
u => u.HasOne(c => c.SysMenu).WithMany(c => c.SysRoleMenus).HasForeignKey(c => c.SysMenuId),
u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleMenus).HasForeignKey(c => c.SysRoleId),
u =>
{
u.HasKey(c => new { c.SysRoleId, c.SysMenuId });
});
}
}
}