feat:furion rbac搭建

This commit is contained in:
橙子
2023-04-13 21:12:06 +08:00
parent 18696ec542
commit b9dad93c9d
194 changed files with 9557 additions and 75 deletions

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class DeptConst
{
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class MenuConst
{
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class PostConst
{
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class RoleConst
{
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.ConstClasses
{
/// <summary>
/// 常量定义
/// </summary>
public class UserConst
{
public const string _错误 = "登录失败!用户名或密码错误!";
public const string _不存在 = "登录失败!用户名不存在!";
public const string _密码为空 = "密码为空,添加失败!";
public const string _用户存在 = "用户已经存在,添加失败!";
public const string = "登录禁用!该用户分配无任何权限,无意义登录!";
public const string = "登录禁用!该用户分配无任何角色,无意义登录!";
public const string Admin = "cc";
public const string AdminRolesCode = "admin";
public const string AdminPermissionCode = "*:*:*";
public const string GuestRoleCode = "guest";
public const string CommonRoleName = "common";
}
}

View File

@@ -0,0 +1,15 @@
using System.Collections.Generic;
using Yi.Furion.Rbac.Core.Entities;
namespace Yi.Furion.Rbac.Core.Dtos
{
public class UserRoleMenuDto
{
public UserEntity User { get; set; } = new();
public HashSet<RoleEntity> Roles { get; set; } = new();
public HashSet<MenuEntity> Menus { get; set; } = new();
public List<string> RoleCodes { get; set; } = new();
public List<string> PermissionCodes { get; set; } = new();
}
}

View File

@@ -0,0 +1,30 @@
using System.Collections.Generic;
using static Yi.Framework.Infrastructure.Helper.TreeHelper;
namespace Yi.Furion.Rbac.Core.Dtos
{
public class Vue3RouterDto : ITreeModel<Vue3RouterDto>
{
public long Id { get; set; }
public long ParentId { get; set; }
public int OrderNum { get; set; }
public string Name { get; set; } = string.Empty;
public string Path { get; set; } = string.Empty;
public bool Hidden { get; set; }
public string Redirect { get; set; } = string.Empty;
public string Component { get; set; } = string.Empty;
public bool AlwaysShow { get; set; }
public Meta Meta { get; set; } = new Meta();
public List<Vue3RouterDto> Children { get; set; }
}
public class Meta
{
public string Title { get; set; } = string.Empty;
public string Icon { get; set; } = string.Empty;
public bool NoCache { get; set; }
public string link { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,85 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Data.Entities;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 部门表
///</summary>
[SugarTable("Dept")]
public partial class DeptEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum, IState
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; } = true;
/// <summary>
/// 部门名称
///</summary>
public string DeptName { get; set; } = string.Empty;
/// <summary>
/// 部门编码
///</summary>
[SugarColumn(ColumnName = "DeptCode")]
public string DeptCode { get; set; } = string.Empty;
/// <summary>
/// 负责人
///</summary>
[SugarColumn(ColumnName = "Leader")]
public string Leader { get; set; }
/// <summary>
/// 父级id
///</summary>
[SugarColumn(ColumnName = "ParentId")]
public long ParentId { get; set; }
/// <summary>
/// 描述
///</summary>
[SugarColumn(ColumnName = "Remark")]
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,48 @@
using System;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities
{
[SugarTable("LoginLog")]
public class LoginLogEntity : IEntity<long>, ICreationAuditedObject
{
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
public long Id { get; set; }
public DateTime CreationTime { get; set; }
/// <summary>
/// 登录用户
///</summary>
[SugarColumn(ColumnName = "LoginUser")]
public string LoginUser { get; set; }
/// <summary>
/// 登录地点
///</summary>
[SugarColumn(ColumnName = "LoginLocation")]
public string LoginLocation { get; set; }
/// <summary>
/// 登录Ip
///</summary>
[SugarColumn(ColumnName = "LoginIp")]
public string LoginIp { get; set; }
/// <summary>
/// 浏览器
///</summary>
[SugarColumn(ColumnName = "Browser")]
public string Browser { get; set; }
/// <summary>
/// 操作系统
///</summary>
[SugarColumn(ColumnName = "Os")]
public string Os { get; set; }
/// <summary>
/// 登录信息
///</summary>
[SugarColumn(ColumnName = "LogMsg")]
public string LogMsg { get; set; }
public long? CreatorId { get; set; }
}
}

View File

@@ -0,0 +1,196 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Data.Entities;
using Yi.Framework.Infrastructure.Ddd.Entities;
using Yi.Framework.Infrastructure.Helper;
using Yi.Furion.Rbac.Core.Dtos;
using Yi.Furion.Rbac.Core.EnumClasses;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 菜单表
///</summary>
[SugarTable("Menu")]
public partial class MenuEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum, IState
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; }
/// <summary>
/// 菜单名
/// </summary>
public string MenuName { get; set; } = string.Empty;
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "MenuType")]
public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu;
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "PermissionCode")]
public string PermissionCode { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "ParentId")]
public long ParentId { get; set; }
/// <summary>
/// 菜单图标
///</summary>
[SugarColumn(ColumnName = "MenuIcon")]
public string MenuIcon { get; set; }
/// <summary>
/// 菜单组件路由
///</summary>
[SugarColumn(ColumnName = "Router")]
public string Router { get; set; }
/// <summary>
/// 是否为外部链接
///</summary>
[SugarColumn(ColumnName = "IsLink")]
public bool IsLink { get; set; }
/// <summary>
/// 是否缓存
///</summary>
[SugarColumn(ColumnName = "IsCache")]
public bool IsCache { get; set; }
/// <summary>
/// 是否显示
///</summary>
[SugarColumn(ColumnName = "IsShow")]
public bool IsShow { get; set; } = true;
/// <summary>
/// 描述
///</summary>
[SugarColumn(ColumnName = "Remark")]
public string Remark { get; set; }
/// <summary>
/// 组件路径
///</summary>
[SugarColumn(ColumnName = "Component")]
public string Component { get; set; }
/// <summary>
/// 路由参数
///</summary>
[SugarColumn(ColumnName = "Query")]
public string Query { get; set; }
[SugarColumn(IsIgnore = true)]
public List<MenuEntity> Children { get; set; }
}
/// <summary>
/// 实体扩展
/// </summary>
public static class MenuEntityExtensions
{
/// <summary>
/// 构建vue3路由
/// </summary>
/// <param name="menus"></param>
/// <returns></returns>
public static List<Vue3RouterDto> Vue3RouterBuild(this List<MenuEntity> menus)
{
menus = menus.Where(m => m.MenuType != MenuTypeEnum.Component).ToList();
List<Vue3RouterDto> routers = new();
foreach (var m in menus)
{
var r = new Vue3RouterDto();
r.OrderNum = m.OrderNum;
var routerName = m.Router?.Split("/").LastOrDefault();
r.Id = m.Id;
r.ParentId = m.ParentId;
//开头大写
r.Name = routerName?.First().ToString().ToUpper() + routerName?.Substring(1);
r.Path = m.Router!;
r.Hidden = !m.IsShow;
if (m.MenuType == MenuTypeEnum.Catalogue)
{
r.Redirect = "noRedirect";
r.AlwaysShow = true;
//判断是否为最顶层的路由
if (0 == m.ParentId)
{
r.Component = "Layout";
}
else
{
r.Component = "ParentView";
}
}
if (m.MenuType == MenuTypeEnum.Menu)
{
r.Redirect = "noRedirect";
r.AlwaysShow = true;
r.Component = m.Component!;
r.AlwaysShow = false;
}
r.Meta = new Meta
{
Title = m.MenuName!,
Icon = m.MenuIcon!,
NoCache = !m.IsCache
};
if (m.IsLink)
{
r.Meta.link = m.Router!;
r.AlwaysShow = false;
}
routers.Add(r);
}
return TreeHelper.SetTree(routers);
}
}
}

View File

@@ -0,0 +1,74 @@
using System;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Data.Entities;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 岗位表
///</summary>
[SugarTable("Post")]
public partial class PostEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum, IState
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; } = true;
/// <summary>
/// 岗位编码
///</summary>
[SugarColumn(ColumnName = "PostCode")]
public string PostCode { get; set; } = string.Empty;
/// <summary>
/// 岗位名称
///</summary>
[SugarColumn(ColumnName = "PostName")]
public string PostName { get; set; } = string.Empty;
/// <summary>
/// 描述
///</summary>
[SugarColumn(ColumnName = "Remark")]
public string Remark { get; set; }
}
}

View File

@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
using SqlSugar;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities;
/// <summary>
/// 角色部门关系表
///</summary>
[SugarTable("RoleDept")]
public partial class RoleDeptEntity : IEntity<long>
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 角色id
///</summary>
[SugarColumn(ColumnName = "RoleId")]
public long? RoleId { get; set; }
/// <summary>
/// 部门id
///</summary>
[SugarColumn(ColumnName = "DeptId")]
public long? DeptId { get; set; }
}

View File

@@ -0,0 +1,88 @@
using System;
using System.Collections.Generic;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Data.Entities;
using Yi.Framework.Infrastructure.Ddd.Entities;
using Yi.Furion.Rbac.Core.EnumClasses;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 角色表
/// </summary>
[SugarTable("Role")]
public class RoleEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum, IState
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
/// <summary>
/// 角色名
/// </summary>
public string RoleName { get; set; } = string.Empty;
/// <summary>
/// 角色编码
///</summary>
[SugarColumn(ColumnName = "RoleCode")]
public string RoleCode { get; set; } = string.Empty;
/// <summary>
/// 描述
///</summary>
[SugarColumn(ColumnName = "Remark")]
public string Remark { get; set; }
/// <summary>
/// 角色数据范围
///</summary>
[SugarColumn(ColumnName = "DataScope")]
public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL;
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; } = true;
[Navigate(typeof(RoleMenuEntity), nameof(RoleMenuEntity.RoleId), nameof(RoleMenuEntity.MenuId))]
public List<MenuEntity> Menus { get; set; }
[Navigate(typeof(RoleDeptEntity), nameof(RoleDeptEntity.RoleId), nameof(RoleDeptEntity.DeptId))]
public List<DeptEntity> Depts { get; set; }
}
}

View File

@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
using SqlSugar;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities;
/// <summary>
/// 角色菜单关系表
///</summary>
[SugarTable("RoleMenu")]
public partial class RoleMenuEntity : IEntity<long>
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "RoleId")]
public long RoleId { get; set; }
/// <summary>
///
///</summary>
[SugarColumn(ColumnName = "MenuId")]
public long MenuId { get; set; }
}

View File

@@ -0,0 +1,211 @@
using System;
using System.Collections.Generic;
using SqlSugar;
using Yi.Framework.Infrastructure.Data.Auditing;
using Yi.Framework.Infrastructure.Data.Entities;
using Yi.Framework.Infrastructure.Ddd.Entities;
using Yi.Framework.Infrastructure.Helper;
using Yi.Furion.Rbac.Core.EnumClasses;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 用户表
/// </summary>
[SugarTable("User")]
public class UserEntity : IEntity<long>, ISoftDelete, IAuditedObject, IOrderNum, IState
{
public UserEntity()
{
}
public UserEntity(string userName, string password, long phone, string nick = "萌新")
{
Id = SnowflakeHelper.NextId;
UserName = userName;
Password = password;
Phone = phone;
Nick = nick;
BuildPassword();
}
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 逻辑删除
/// </summary>
public bool IsDeleted { get; set; }
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int? Age { get; set; }
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; } = string.Empty;
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; } = string.Empty;
/// <summary>
/// 加密盐值
/// </summary>
public string Salt { get; set; } = string.Empty;
/// <summary>
/// 头像
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string Nick { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// Ip
/// </summary>
public string Ip { get; set; }
/// <summary>
/// 地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 电话
/// </summary>
public long? Phone { get; set; }
/// <summary>
/// 简介
/// </summary>
public string Introduction { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 性别
/// </summary>
public SexEnum Sex { get; set; } = SexEnum.Unknown;
/// <summary>
/// 部门id
/// </summary>
public long? DeptId { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreationTime { get; set; } = DateTime.Now;
/// <summary>
/// 创建者
/// </summary>
public long? CreatorId { get; set; }
/// <summary>
/// 最后修改者
/// </summary>
public long? LastModifierId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 排序
/// </summary>
public int OrderNum { get; set; } = 0;
/// <summary>
/// 状态
/// </summary>
public bool State { get; set; } = true;
/// <summary>
/// 角色
/// </summary>
[Navigate(typeof(UserRoleEntity), nameof(UserRoleEntity.UserId), nameof(UserRoleEntity.RoleId))]
public List<RoleEntity> Roles { get; set; }
/// <summary>
/// 岗位
/// </summary>
[Navigate(typeof(UserPostEntity), nameof(UserPostEntity.UserId), nameof(UserPostEntity.PostId))]
public List<PostEntity> Posts { get; set; }
/// <summary>
/// 部门
/// </summary>
[Navigate(NavigateType.OneToOne, nameof(DeptId))]
public DeptEntity Dept { get; set; }
/// <summary>
/// 构建密码MD5盐值加密
/// </summary>
public UserEntity BuildPassword(string password = null)
{
//如果不传值那就把自己的password当作传进来的password
if (password == null)
{
if (Password == null)
{
throw new ArgumentNullException(nameof(Password));
}
password = Password;
}
Salt = MD5Helper.GenerateSalt();
Password = MD5Helper.SHA2Encode(password, Salt);
return this;
}
/// <summary>
/// 判断密码和加密后的密码是否相同
/// </summary>
/// <param name="password"></param>
/// <returns></returns>
public bool JudgePassword(string password)
{
if (Salt is null)
{
throw new ArgumentNullException(Salt);
}
var p = MD5Helper.SHA2Encode(password, Salt);
if (Password == MD5Helper.SHA2Encode(password, Salt))
{
return true;
}
return false;
}
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
using SqlSugar;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities;
/// <summary>
/// 用户岗位表
///</summary>
[SugarTable("UserPost")]
public partial class UserPostEntity : IEntity<long>
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 用户id
/// </summary>
[SugarColumn(ColumnName = "UserId")]
public long UserId { get; set; }
/// <summary>
/// 岗位id
///</summary>
[SugarColumn(ColumnName = "PostId")]
public long PostId { get; set; }
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using SqlSugar;
using Yi.Framework.Infrastructure.Ddd.Entities;
namespace Yi.Furion.Rbac.Core.Entities
{
/// <summary>
/// 用户角色关系表
///</summary>
[SugarTable("UserRole")]
public partial class UserRoleEntity : IEntity<long>
{
/// <summary>
/// 主键
/// </summary>
[SugarColumn(IsPrimaryKey = true)]
public long Id { get; set; }
/// <summary>
/// 角色id
/// </summary>
public long RoleId { get; set; }
/// <summary>
/// 用户id
/// </summary>
public long UserId { get; set; }
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.EnumClasses
{
public enum DataScopeEnum
{
ALL = 0,
CUSTOM = 1,
DEPT = 2,
DEPT_FOLLOW = 3,
USER = 4
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.EnumClasses
{
public enum MenuTypeEnum
{
Catalogue = 0, //目录
Menu = 1, //菜单
Component = 2//组件
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Furion.Rbac.Core.EnumClasses
{
/// <summary>
/// 性别
/// </summary>
public enum SexEnum
{
/// <summary>
/// 男性
/// </summary>
Male = 0,
/// <summary>
/// 女性
/// </summary>
Woman = 1,
/// <summary>
/// 未知
/// </summary>
Unknown = 2
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Furion.EventBus;
namespace Yi.Furion.Rbac.Core.Etos
{
public class LoginEventSource : IEventSource
{
public LoginEventSource(LoginEventArgs payload)
{ Payload = payload; }
public string EventId => nameof(LoginEventSource);
public DateTime CreatedTime { get; set; } = DateTime.UtcNow;
[Newtonsoft.Json.JsonIgnore]
[System.Text.Json.Serialization.JsonIgnore]
public CancellationToken CancellationToken { get; set; }
public object Payload { get; set; }
}
public class LoginEventArgs
{
public long UserId { get; set; }
public string UserName { get; set; }
}
}

View File

@@ -13,11 +13,18 @@
<None Remove="Yi.Furion.Rbac.Core.xml" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.8.7.41" />
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.8.7.41" />
<PackageReference Include="Furion.Pure" Version="4.8.7.45" />
<PackageReference Include="SqlSugarCore" Version="5.1.4.67-preview06" />
<PackageReference Include="UAParser" Version="3.1.47" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Yi.Framework.Infrastructure\Yi.Framework.Infrastructure.csproj" />
</ItemGroup>
</Project>

View File

@@ -4,5 +4,619 @@
<name>Yi.Furion.Rbac.Core</name>
</assembly>
<members>
<member name="T:Yi.Furion.Rbac.Core.ConstClasses.DeptConst">
<summary>
常量定义
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.ConstClasses.MenuConst">
<summary>
常量定义
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.ConstClasses.PostConst">
<summary>
常量定义
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.ConstClasses.RoleConst">
<summary>
常量定义
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.ConstClasses.UserConst">
<summary>
常量定义
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.DeptEntity">
<summary>
部门表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.State">
<summary>
状态
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.DeptName">
<summary>
部门名称
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.DeptCode">
<summary>
部门编码
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.Leader">
<summary>
负责人
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.ParentId">
<summary>
父级id
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.DeptEntity.Remark">
<summary>
描述
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.LoginUser">
<summary>
登录用户
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.LoginLocation">
<summary>
登录地点
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.LoginIp">
<summary>
登录Ip
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.Browser">
<summary>
浏览器
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.Os">
<summary>
操作系统
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.LoginLogEntity.LogMsg">
<summary>
登录信息
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.MenuEntity">
<summary>
菜单表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.State">
<summary>
状态
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.MenuName">
<summary>
菜单名
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.MenuType">
<summary>
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.PermissionCode">
<summary>
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.ParentId">
<summary>
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.MenuIcon">
<summary>
菜单图标
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.Router">
<summary>
菜单组件路由
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.IsLink">
<summary>
是否为外部链接
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.IsCache">
<summary>
是否缓存
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.IsShow">
<summary>
是否显示
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.Remark">
<summary>
描述
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.Component">
<summary>
组件路径
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.MenuEntity.Query">
<summary>
路由参数
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.MenuEntityExtensions">
<summary>
实体扩展
</summary>
</member>
<member name="M:Yi.Furion.Rbac.Core.Entities.MenuEntityExtensions.Vue3RouterBuild(System.Collections.Generic.List{Yi.Furion.Rbac.Core.Entities.MenuEntity})">
<summary>
构建vue3路由
</summary>
<param name="menus"></param>
<returns></returns>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.PostEntity">
<summary>
岗位表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.State">
<summary>
状态
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.PostCode">
<summary>
岗位编码
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.PostName">
<summary>
岗位名称
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.PostEntity.Remark">
<summary>
描述
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.RoleDeptEntity">
<summary>
角色部门关系表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleDeptEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleDeptEntity.RoleId">
<summary>
角色id
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleDeptEntity.DeptId">
<summary>
部门id
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.RoleEntity">
<summary>
角色表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.RoleName">
<summary>
角色名
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.RoleCode">
<summary>
角色编码
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.Remark">
<summary>
描述
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.DataScope">
<summary>
角色数据范围
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleEntity.State">
<summary>
状态
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.RoleMenuEntity">
<summary>
角色菜单关系表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleMenuEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleMenuEntity.RoleId">
<summary>
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.RoleMenuEntity.MenuId">
<summary>
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.UserEntity">
<summary>
用户表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.IsDeleted">
<summary>
逻辑删除
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Name">
<summary>
姓名
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Age">
<summary>
年龄
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.UserName">
<summary>
用户名
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Password">
<summary>
密码
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Salt">
<summary>
加密盐值
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Icon">
<summary>
头像
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Nick">
<summary>
昵称
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Email">
<summary>
邮箱
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Ip">
<summary>
Ip
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Address">
<summary>
地址
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Phone">
<summary>
电话
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Introduction">
<summary>
简介
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Remark">
<summary>
备注
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Sex">
<summary>
性别
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.DeptId">
<summary>
部门id
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.CreationTime">
<summary>
创建时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.CreatorId">
<summary>
创建者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.LastModifierId">
<summary>
最后修改者
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.LastModificationTime">
<summary>
最后修改时间
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.OrderNum">
<summary>
排序
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.State">
<summary>
状态
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Roles">
<summary>
角色
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Posts">
<summary>
岗位
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserEntity.Dept">
<summary>
部门
</summary>
</member>
<member name="M:Yi.Furion.Rbac.Core.Entities.UserEntity.BuildPassword(System.String)">
<summary>
构建密码MD5盐值加密
</summary>
</member>
<member name="M:Yi.Furion.Rbac.Core.Entities.UserEntity.JudgePassword(System.String)">
<summary>
判断密码和加密后的密码是否相同
</summary>
<param name="password"></param>
<returns></returns>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.UserPostEntity">
<summary>
用户岗位表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserPostEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserPostEntity.UserId">
<summary>
用户id
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserPostEntity.PostId">
<summary>
岗位id
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.Entities.UserRoleEntity">
<summary>
用户角色关系表
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserRoleEntity.Id">
<summary>
主键
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserRoleEntity.RoleId">
<summary>
角色id
</summary>
</member>
<member name="P:Yi.Furion.Rbac.Core.Entities.UserRoleEntity.UserId">
<summary>
用户id
</summary>
</member>
<member name="T:Yi.Furion.Rbac.Core.EnumClasses.SexEnum">
<summary>
性别
</summary>
</member>
<member name="F:Yi.Furion.Rbac.Core.EnumClasses.SexEnum.Male">
<summary>
男性
</summary>
</member>
<member name="F:Yi.Furion.Rbac.Core.EnumClasses.SexEnum.Woman">
<summary>
女性
</summary>
</member>
<member name="F:Yi.Furion.Rbac.Core.EnumClasses.SexEnum.Unknown">
<summary>
未知
</summary>
</member>
</members>
</doc>