chore: 构建稳定版本
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Users;
|
||||
using Yi.Framework.Core.Extensions;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Consts;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Authorization
|
||||
{
|
||||
public class DefaultPermissionHandler : IPermissionHandler, ITransientDependency
|
||||
{
|
||||
private ICurrentUser _currentUser { get; set; }
|
||||
private IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public DefaultPermissionHandler(ICurrentUser currentUser, IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_currentUser = currentUser;
|
||||
_httpContextAccessor = httpContextAccessor;
|
||||
}
|
||||
public bool IsPass(string permission)
|
||||
{
|
||||
var permissions = _httpContextAccessor.HttpContext.GetUserPermissions(TokenTypeConst.Permission);
|
||||
if (permissions is not null)
|
||||
{
|
||||
if (permissions.Contains("*:*:*"))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return permissions.Contains(permission);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace Yi.Framework.Rbac.Domain.Authorization
|
||||
{
|
||||
public interface IPermissionHandler
|
||||
{
|
||||
bool IsPass(string permission);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
namespace Yi.Framework.Rbac.Domain.Authorization
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
|
||||
public class PermissionAttribute : Attribute
|
||||
{
|
||||
internal string Code { get; set; }
|
||||
|
||||
public PermissionAttribute(string code)
|
||||
{
|
||||
Code = code;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
using Microsoft.AspNetCore.Http.HttpResults;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Http;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Authorization
|
||||
{
|
||||
internal class PermissionGlobalAttribute : ActionFilterAttribute, ITransientDependency
|
||||
{
|
||||
private readonly IPermissionHandler _permissionHandler;
|
||||
public PermissionGlobalAttribute(IPermissionHandler permissionHandler)
|
||||
{
|
||||
_permissionHandler = permissionHandler;
|
||||
}
|
||||
public override void OnActionExecuting(ActionExecutingContext context)
|
||||
{
|
||||
if (context.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor) return;
|
||||
PermissionAttribute? perAttribute = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
|
||||
.FirstOrDefault(a => a.GetType().Equals(typeof(PermissionAttribute))) as PermissionAttribute;
|
||||
//空对象直接返回
|
||||
if (perAttribute is null) return;
|
||||
|
||||
var result = _permissionHandler.IsPass(perAttribute.Code);
|
||||
|
||||
if (!result)
|
||||
{
|
||||
var model = new RemoteServiceErrorInfo()
|
||||
{
|
||||
Code = "403",
|
||||
Message = $"您无权限访问,请联系管理员申请",
|
||||
Details = $"您无权限访问该接口-{context.HttpContext.Request.Path.Value}",
|
||||
};
|
||||
|
||||
var content = new ObjectResult(new { error = model })
|
||||
{
|
||||
StatusCode = 403
|
||||
};
|
||||
context.Result = content;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 配置表
|
||||
/// </summary>
|
||||
[SugarTable("Config")]
|
||||
public class ConfigEntity : Entity<Guid>, IAuditedObject, IOrderNum, ISoftDelete
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
/// <summary>
|
||||
/// 配置名称
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "ConfigName")]
|
||||
public string ConfigName { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 配置键
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "ConfigKey")]
|
||||
public string ConfigKey { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 配置值
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "ConfigValue")]
|
||||
public string ConfigValue { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 配置类别
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "ConfigType")]
|
||||
public string? ConfigType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序字段
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "OrderNum")]
|
||||
public int OrderNum { get; set; }
|
||||
/// <summary>
|
||||
/// 描述
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string? Remark { get; set; }
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
public Guid? LastModifierId { get; set; }
|
||||
|
||||
public DateTime? LastModificationTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 部门表
|
||||
///</summary>
|
||||
[SugarTable("Dept")]
|
||||
public class DeptEntity : Entity<Guid>, ISoftDelete, IAuditedObject, IOrderNum, IState
|
||||
{
|
||||
public DeptEntity()
|
||||
{
|
||||
}
|
||||
|
||||
public DeptEntity(Guid Id) { this.Id = Id; ParentId = Guid.Empty; }
|
||||
|
||||
public DeptEntity(Guid Id, Guid parentId) { this.Id = Id; ParentId = parentId; }
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后修改者
|
||||
/// </summary>
|
||||
public Guid? 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 Guid ParentId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 描述
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string? Remark { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
[SugarTable("Dictionary")]
|
||||
public class DictionaryEntity : Entity<Guid>, IAuditedObject, ISoftDelete, IOrderNum, IState
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int OrderNum { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public bool State { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 描述
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string? Remark { get; set; }
|
||||
/// <summary>
|
||||
/// tag类型
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "ListClass")]
|
||||
public string? ListClass { get; set; }
|
||||
/// <summary>
|
||||
/// tagClass
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "CssClass")]
|
||||
public string? CssClass { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 字典类型
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DictType")]
|
||||
public string DictType { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 字典标签
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DictLabel")]
|
||||
public string? DictLabel { get; set; }
|
||||
/// <summary>
|
||||
/// 字典值
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DictValue")]
|
||||
public string DictValue { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 是否为该类型的默认值
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "IsDefault")]
|
||||
public bool IsDefault { get; set; }
|
||||
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
public Guid? LastModifierId { get; set; }
|
||||
|
||||
public DateTime? LastModificationTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
[SugarTable("DictionaryType")]
|
||||
public class DictionaryTypeEntity : Entity<Guid>, IAuditedObject, ISoftDelete, IOrderNum
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 排序
|
||||
/// </summary>
|
||||
public int OrderNum { get; set; } = 0;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 状态
|
||||
/// </summary>
|
||||
public bool? State { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// 字典名称
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DictName")]
|
||||
public string DictName { get; set; } = string.Empty;
|
||||
/// <summary>
|
||||
/// 字典类型
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DictType")]
|
||||
public string DictType { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 描述
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Remark")]
|
||||
public string? Remark { get; set; }
|
||||
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
public Guid? LastModifierId { get; set; }
|
||||
|
||||
public DateTime? LastModificationTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
using IPTools.Core;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using SqlSugar;
|
||||
using UAParser;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core.Extensions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
[SugarTable("LoginLog")]
|
||||
public class LoginLogEntity : Entity<Guid>, ICreationAuditedObject
|
||||
{
|
||||
[SugarColumn(ColumnName = "Id", IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected 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 Guid? CreatorId { get; set; }
|
||||
|
||||
|
||||
public LoginLogEntity GetInfoByHttpContext(HttpContext context)
|
||||
{
|
||||
ClientInfo GetClientInfo(HttpContext context)
|
||||
{
|
||||
var str = context.GetUserAgent();
|
||||
var uaParser = Parser.GetDefault();
|
||||
ClientInfo c = uaParser.Parse(str);
|
||||
return c;
|
||||
}
|
||||
var ipAddr = context.GetClientIp();
|
||||
IpInfo location;
|
||||
if (ipAddr == "127.0.0.1")
|
||||
{
|
||||
location = new IpInfo() { Province = "本地", City = "本机" };
|
||||
}
|
||||
else
|
||||
{
|
||||
location = IpTool.Search(ipAddr);
|
||||
}
|
||||
ClientInfo clientInfo = GetClientInfo(context);
|
||||
LoginLogEntity entity = new()
|
||||
{
|
||||
Browser = clientInfo.Device.Family,
|
||||
Os = clientInfo.OS.ToString(),
|
||||
LoginIp = ipAddr,
|
||||
LoginLocation = location.Province + "-" + location.City
|
||||
};
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Dtos;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 菜单表
|
||||
///</summary>
|
||||
[SugarTable("Menu")]
|
||||
public partial class MenuEntity : Entity<Guid>, ISoftDelete, IAuditedObject, IOrderNum, IState
|
||||
{
|
||||
public MenuEntity() { }
|
||||
|
||||
public MenuEntity(Guid id) { Id = id; ParentId = Guid.Empty; }
|
||||
public MenuEntity(Guid id, Guid parentId) { Id = id; ParentId = parentId; }
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后修改者
|
||||
/// </summary>
|
||||
public Guid? 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 Guid 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 (Guid.Empty == 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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Rbac.Domain.Shared.OperLog;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 操作日志表
|
||||
///</summary>
|
||||
[SugarTable("OperationLog")]
|
||||
public class OperationLogEntity : Entity<Guid>, ICreationAuditedObject
|
||||
{
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
/// <summary>
|
||||
/// 操作模块
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Title")]
|
||||
public string? Title { get; set; }
|
||||
/// <summary>
|
||||
/// 操作类型
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "OperType")]
|
||||
public OperEnum OperType { get; set; }
|
||||
/// <summary>
|
||||
/// 请求方法
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RequestMethod")]
|
||||
public string? RequestMethod { get; set; }
|
||||
/// <summary>
|
||||
/// 操作人员
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "OperUser")]
|
||||
public string? OperUser { get; set; }
|
||||
/// <summary>
|
||||
/// 操作Ip
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "OperIp")]
|
||||
public string? OperIp { get; set; }
|
||||
/// <summary>
|
||||
/// 操作地点
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "OperLocation")]
|
||||
public string? OperLocation { get; set; }
|
||||
/// <summary>
|
||||
/// 操作方法
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "Method")]
|
||||
public string? Method { get; set; }
|
||||
/// <summary>
|
||||
/// 请求参数
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RequestParam")]
|
||||
public string? RequestParam { get; set; }
|
||||
/// <summary>
|
||||
/// 请求结果
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RequestResult", Length = 9999)]
|
||||
public string? RequestResult { get; set; }
|
||||
|
||||
public DateTime CreationTime { get; set; }
|
||||
|
||||
public Guid? CreatorId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 岗位表
|
||||
///</summary>
|
||||
[SugarTable("Post")]
|
||||
public partial class PostEntity : Entity<Guid>, ISoftDelete, IAuditedObject, IOrderNum, IState
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后修改者
|
||||
/// </summary>
|
||||
public Guid? 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; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 角色部门关系表
|
||||
///</summary>
|
||||
[SugarTable("RoleDept")]
|
||||
public partial class RoleDeptEntity : Entity<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 角色id
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RoleId")]
|
||||
public Guid RoleId { get; set; }
|
||||
/// <summary>
|
||||
/// 部门id
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "DeptId")]
|
||||
public Guid DeptId { get; set; }
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 角色表
|
||||
/// </summary>
|
||||
[SugarTable("Role")]
|
||||
public class RoleEntity : Entity<Guid>, ISoftDelete, IAuditedObject, IOrderNum, IState
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 逻辑删除
|
||||
/// </summary>
|
||||
public bool IsDeleted { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后修改者
|
||||
/// </summary>
|
||||
public Guid? 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; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities;
|
||||
/// <summary>
|
||||
/// 角色菜单关系表
|
||||
///</summary>
|
||||
[SugarTable("RoleMenu")]
|
||||
public partial class RoleMenuEntity : Entity<Guid>
|
||||
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
/// <summary>
|
||||
///
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "RoleId")]
|
||||
public Guid RoleId { get; set; }
|
||||
/// <summary>
|
||||
///
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "MenuId")]
|
||||
public Guid MenuId { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Volo.Abp.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
public class StudentEntity : Entity<Guid>
|
||||
{
|
||||
|
||||
[SqlSugar.SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
public string Name { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Auditing;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Yi.Framework.Core;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Enums;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户表
|
||||
/// </summary>
|
||||
[SugarTable("User")]
|
||||
public class UserEntity : Entity<Guid>, ISoftDelete, IAuditedObject, IOrderNum, IState
|
||||
{
|
||||
public UserEntity()
|
||||
{
|
||||
|
||||
}
|
||||
public UserEntity(string userName, string password, long phone, string nick = "萌新")
|
||||
{
|
||||
UserName = userName;
|
||||
Password = password;
|
||||
Phone = phone;
|
||||
Nick = nick;
|
||||
BuildPassword();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected 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 Guid? DeptId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 创建时间
|
||||
/// </summary>
|
||||
public DateTime CreationTime { get; set; } = DateTime.Now;
|
||||
|
||||
/// <summary>
|
||||
/// 创建者
|
||||
/// </summary>
|
||||
public Guid? CreatorId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最后修改者
|
||||
/// </summary>
|
||||
public Guid? 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities;
|
||||
/// <summary>
|
||||
/// 用户岗位表
|
||||
///</summary>
|
||||
[SugarTable("UserPost")]
|
||||
public partial class UserPostEntity : Entity<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
/// <summary>
|
||||
/// 用户id
|
||||
/// </summary>
|
||||
[SugarColumn(ColumnName = "UserId")]
|
||||
public Guid UserId { get; set; }
|
||||
/// <summary>
|
||||
/// 岗位id
|
||||
///</summary>
|
||||
[SugarColumn(ColumnName = "PostId")]
|
||||
public Guid PostId { get; set; }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
using SqlSugar;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Entities
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户角色关系表
|
||||
///</summary>
|
||||
[SugarTable("UserRole")]
|
||||
public partial class UserRoleEntity : Entity<Guid>
|
||||
{
|
||||
/// <summary>
|
||||
/// 主键
|
||||
/// </summary>
|
||||
[SugarColumn(IsPrimaryKey = true)]
|
||||
public override Guid Id { get; protected set; }
|
||||
|
||||
/// <summary>
|
||||
/// 角色id
|
||||
/// </summary>
|
||||
public Guid RoleId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 用户id
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Domain.Entities.Events;
|
||||
using Volo.Abp.EventBus;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.EventHandlers
|
||||
{
|
||||
public class StudentEventHandler : ILocalEventHandler<EntityCreatedEventData<StudentEntity>>, ITransientDependency
|
||||
{
|
||||
public Task HandleEventAsync(EntityCreatedEventData<StudentEntity> eventData)
|
||||
{
|
||||
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(eventData.Entity));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,144 @@
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Domain.Entities;
|
||||
using Volo.Abp.Domain.Services;
|
||||
using Volo.Abp.Security.Claims;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Consts;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Dtos;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// 用户领域服务
|
||||
/// </summary>
|
||||
public class AccountManager : DomainService
|
||||
{
|
||||
private readonly ISqlSugarRepository<UserEntity> _repository;
|
||||
public AccountManager(ISqlSugarRepository<UserEntity> repository)
|
||||
{
|
||||
_repository = repository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 登录效验
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="userAction"></param>
|
||||
/// <returns></returns>
|
||||
public async Task LoginValidationAsync(string userName, string password, Action<UserEntity> userAction = null)
|
||||
{
|
||||
var user = new UserEntity();
|
||||
if (await ExistAsync(userName, o => user = o))
|
||||
{
|
||||
if (userAction is not null)
|
||||
{
|
||||
userAction.Invoke(user);
|
||||
}
|
||||
if (user.Password == MD5Helper.SHA2Encode(password, user.Salt))
|
||||
{
|
||||
return;
|
||||
}
|
||||
throw new UserFriendlyException(UserConst.Login_Error);
|
||||
}
|
||||
throw new UserFriendlyException(UserConst.Login_User_No_Exist);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断账户合法存在
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="userAction"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> ExistAsync(string userName, Action<UserEntity> userAction = null)
|
||||
{
|
||||
var user = await _repository.GetFirstAsync(u => u.UserName == userName && u.State == true);
|
||||
if (userAction is not null)
|
||||
{
|
||||
userAction.Invoke(user);
|
||||
}
|
||||
if (user == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 令牌转换
|
||||
/// </summary>
|
||||
/// <param name="dto"></param>
|
||||
/// <returns></returns>
|
||||
|
||||
public Dictionary<string, object> UserInfoToClaim(UserRoleMenuDto dto)
|
||||
{
|
||||
var claims = new Dictionary<string, object>();
|
||||
claims.Add(AbpClaimTypes.UserId, dto.User.Id);
|
||||
claims.Add(AbpClaimTypes.UserName, dto.User.UserName);
|
||||
if (dto.User.DeptId is not null)
|
||||
{
|
||||
claims.Add(TokenTypeConst.DeptId, dto.User.DeptId);
|
||||
}
|
||||
if (dto.User.Email is not null)
|
||||
{
|
||||
claims.Add(AbpClaimTypes.Email, dto.User.Email);
|
||||
}
|
||||
if (dto.User.Phone is not null)
|
||||
{
|
||||
claims.Add(AbpClaimTypes.PhoneNumber, dto.User.Phone);
|
||||
}
|
||||
if (UserConst.Admin.Equals(dto.User.UserName))
|
||||
{
|
||||
claims.Add(TokenTypeConst.Permission, UserConst.AdminPermissionCode);
|
||||
claims.Add(TokenTypeConst.Roles, UserConst.AdminRolesCode);
|
||||
}
|
||||
else
|
||||
{
|
||||
claims.Add(TokenTypeConst.Permission, dto.PermissionCodes.Where(x => !string.IsNullOrEmpty(x)));
|
||||
claims.Add(AbpClaimTypes.Role, dto.RoleCodes.Where(x => !string.IsNullOrEmpty(x)));
|
||||
}
|
||||
|
||||
return claims;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 更新密码
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="newPassword"></param>
|
||||
/// <param name="oldPassword"></param>
|
||||
/// <returns></returns>
|
||||
/// <exception cref="UserFriendlyException"></exception>
|
||||
public async Task UpdatePasswordAsync(Guid userId, string newPassword, string oldPassword)
|
||||
{
|
||||
var user = await _repository.GetByIdAsync(userId);
|
||||
|
||||
if (!user.JudgePassword(oldPassword))
|
||||
{
|
||||
throw new UserFriendlyException("无效更新!原密码错误!");
|
||||
}
|
||||
user.Password = newPassword;
|
||||
user.BuildPassword();
|
||||
await _repository.UpdateAsync(user);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置密码
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> RestPasswordAsync(Guid userId, string password)
|
||||
{
|
||||
var user = await _repository.GetByIdAsync(userId);
|
||||
EntityHelper.TrySetId(user, () => GuidGenerator.Create(), true);
|
||||
user.Password = password;
|
||||
user.BuildPassword();
|
||||
return await _repository.UpdateAsync(user);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
using Volo.Abp.Domain.Services;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
public class RoleManager : DomainService
|
||||
{
|
||||
private ISqlSugarRepository<RoleEntity> _repository;
|
||||
private ISqlSugarRepository<RoleMenuEntity> _roleMenuRepository;
|
||||
public RoleManager(ISqlSugarRepository<RoleEntity> repository, ISqlSugarRepository<RoleMenuEntity> roleMenuRepository)
|
||||
{
|
||||
_repository = repository;
|
||||
_roleMenuRepository = roleMenuRepository;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 给角色设置菜单
|
||||
/// </summary>
|
||||
/// <param name="roleIds"></param>
|
||||
/// <param name="menuIds"></param>
|
||||
/// <returns></returns>
|
||||
public async Task GiveRoleSetMenuAsync(List<Guid> roleIds, List<Guid> menuIds)
|
||||
{
|
||||
//这个是需要事务的,在service中进行工作单元
|
||||
await _roleMenuRepository.DeleteAsync(u => roleIds.Contains(u.RoleId));
|
||||
//遍历用户
|
||||
foreach (var roleId in roleIds)
|
||||
{
|
||||
//添加新的关系
|
||||
List<RoleMenuEntity> roleMenuEntity = new();
|
||||
foreach (var menu in menuIds)
|
||||
{
|
||||
roleMenuEntity.Add(new RoleMenuEntity() { RoleId = roleId, MenuId = menu });
|
||||
}
|
||||
//一次性批量添加
|
||||
await _roleMenuRepository.InsertRangeAsync(roleMenuEntity);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
using Volo.Abp.Domain.Services;
|
||||
using Volo.Abp.Guids;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Managers
|
||||
{
|
||||
public class UserManager : DomainService
|
||||
{
|
||||
private readonly ISqlSugarRepository<UserEntity> _repository;
|
||||
private readonly ISqlSugarRepository<UserRoleEntity> _repositoryUserRole;
|
||||
private readonly ISqlSugarRepository<UserPostEntity> _repositoryUserPost;
|
||||
|
||||
private readonly IGuidGenerator _guidGenerator;
|
||||
public UserManager(ISqlSugarRepository<UserEntity> repository, ISqlSugarRepository<UserRoleEntity> repositoryUserRole, ISqlSugarRepository<UserPostEntity> repositoryUserPost, IGuidGenerator guidGenerator) =>
|
||||
(_repository, _repositoryUserRole, _repositoryUserPost, _guidGenerator) =
|
||||
(repository, repositoryUserRole, repositoryUserPost, guidGenerator);
|
||||
|
||||
/// <summary>
|
||||
/// 给用户设置角色
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <param name="roleIds"></param>
|
||||
/// <returns></returns>
|
||||
public async Task GiveUserSetRoleAsync(List<Guid> userIds, List<Guid> roleIds)
|
||||
{
|
||||
//删除用户之前所有的用户角色关系(物理删除,没有恢复的必要)
|
||||
await _repositoryUserRole.DeleteAsync(u => userIds.Contains(u.UserId));
|
||||
|
||||
if (roleIds is not null)
|
||||
{
|
||||
//遍历用户
|
||||
foreach (var userId in userIds)
|
||||
{
|
||||
//添加新的关系
|
||||
List<UserRoleEntity> userRoleEntities = new();
|
||||
|
||||
foreach (var roleId in roleIds)
|
||||
{
|
||||
userRoleEntities.Add(new UserRoleEntity() { UserId = userId, RoleId = roleId });
|
||||
}
|
||||
//一次性批量添加
|
||||
await _repositoryUserRole.InsertRangeAsync(userRoleEntities);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 给用户设置岗位
|
||||
/// </summary>
|
||||
/// <param name="userIds"></param>
|
||||
/// <param name="postIds"></param>
|
||||
/// <returns></returns>
|
||||
public async Task GiveUserSetPostAsync(List<Guid> userIds, List<Guid> postIds)
|
||||
{
|
||||
//删除用户之前所有的用户角色关系(物理删除,没有恢复的必要)
|
||||
await _repositoryUserPost.DeleteAsync(u => userIds.Contains(u.UserId));
|
||||
if (postIds is not null)
|
||||
{
|
||||
//遍历用户
|
||||
foreach (var userId in userIds)
|
||||
{
|
||||
//添加新的关系
|
||||
List<UserPostEntity> userPostEntities = new();
|
||||
foreach (var post in postIds)
|
||||
{
|
||||
userPostEntities.Add(new UserPostEntity() { UserId = userId, PostId = post });
|
||||
}
|
||||
|
||||
//一次性批量添加
|
||||
await _repositoryUserPost.InsertRangeAsync(userPostEntities);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
using IPTools.Core;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Volo.Abp.DependencyInjection;
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using Volo.Abp.Users;
|
||||
using Yi.Framework.Core.Extensions;
|
||||
using Yi.Framework.Core.Helper;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.Rbac.Domain.Shared.OperLog;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Operlog
|
||||
{
|
||||
public class OperLogGlobalAttribute : ActionFilterAttribute,ITransientDependency
|
||||
{
|
||||
private ILogger<OperLogGlobalAttribute> _logger;
|
||||
private IRepository<OperationLogEntity> _repository;
|
||||
private ICurrentUser _currentUser;
|
||||
//注入一个日志服务
|
||||
public OperLogGlobalAttribute(ILogger<OperLogGlobalAttribute> logger, IRepository<OperationLogEntity> repository, ICurrentUser currentUser)
|
||||
{
|
||||
_logger = logger;
|
||||
_repository = repository;
|
||||
_currentUser = currentUser;
|
||||
}
|
||||
|
||||
public override async void OnResultExecuted(ResultExecutedContext context)
|
||||
{
|
||||
//判断标签是在方法上
|
||||
if (context.ActionDescriptor is not ControllerActionDescriptor controllerActionDescriptor) return;
|
||||
|
||||
//查找标签,获取标签对象
|
||||
OperLogAttribute? operLogAttribute = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
|
||||
.FirstOrDefault(a => a.GetType().Equals(typeof(OperLogAttribute))) as OperLogAttribute;
|
||||
//空对象直接返回
|
||||
if (operLogAttribute is null) return;
|
||||
|
||||
////获取控制器名
|
||||
//string controller = context.RouteData.Values["Controller"].ToString();
|
||||
|
||||
////获取方法名
|
||||
//string action = context.RouteData.Values["Action"].ToString();
|
||||
//获取Ip
|
||||
string ip = context.HttpContext.GetClientIp();
|
||||
|
||||
//根据ip获取地址
|
||||
|
||||
var ipTool = IpTool.Search(ip);
|
||||
string location = ipTool.Province + " " + ipTool.City;
|
||||
|
||||
//日志服务插入一条操作记录即可
|
||||
|
||||
var logEntity = new OperationLogEntity();
|
||||
logEntity.OperIp = ip;
|
||||
//logEntity.OperLocation = location;
|
||||
logEntity.OperType = operLogAttribute.OperType;
|
||||
logEntity.Title = operLogAttribute.Title;
|
||||
logEntity.RequestMethod = context.HttpContext.Request.Method;
|
||||
logEntity.Method = context.HttpContext.Request.Path.Value;
|
||||
logEntity.OperLocation = location;
|
||||
logEntity.OperUser = _currentUser.UserName;
|
||||
if (operLogAttribute.IsSaveResponseData)
|
||||
{
|
||||
if (context.Result is ContentResult result && result.ContentType == "application/json")
|
||||
{
|
||||
logEntity.RequestResult = result.Content?.Replace("\r\n", "").Trim();
|
||||
}
|
||||
if (context.Result is JsonResult result2)
|
||||
{
|
||||
logEntity.RequestResult = result2.Value?.ToString();
|
||||
}
|
||||
|
||||
if (context.Result is ObjectResult result3)
|
||||
{
|
||||
logEntity.RequestResult = JsonHelper.ObjToStr(result3.Value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (operLogAttribute.IsSaveRequestData)
|
||||
{
|
||||
// logEntity.RequestParam = context.HttpContext.GetRequestValue(logEntity.RequestMethod);
|
||||
}
|
||||
|
||||
await _repository.InsertAsync(logEntity);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Repositories
|
||||
{
|
||||
public interface IDeptRepository : ISqlSugarRepository<DeptEntity, Guid>
|
||||
{
|
||||
Task<List<Guid>> GetChildListAsync(Guid deptId);
|
||||
Task<List<DeptEntity>> GetListRoleIdAsync(Guid roleId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.Rbac.Domain.Shared.Dtos;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.Repositories
|
||||
{
|
||||
public interface IUserRepository : ISqlSugarRepository<UserEntity>
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取当前登录用户的所有信息
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
/// <returns></returns>
|
||||
Task<UserRoleMenuDto> GetUserAllInfoAsync(Guid userId);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.SignalRHubs.Model
|
||||
{
|
||||
public class OnlineUserModel
|
||||
{
|
||||
public OnlineUserModel()
|
||||
{
|
||||
|
||||
}
|
||||
public OnlineUserModel(string connnectionId)
|
||||
{
|
||||
ConnnectionId = connnectionId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 客户端连接Id
|
||||
/// </summary>
|
||||
public string? ConnnectionId { get; }
|
||||
/// <summary>
|
||||
/// 用户id
|
||||
/// </summary>
|
||||
public long? UserId { get; set; }
|
||||
public string? UserName { get; set; }
|
||||
public DateTime LoginTime { get; set; }
|
||||
public string? Ipaddr { get; set; }
|
||||
public string? LoginLocation { get; set; }
|
||||
|
||||
public string? Os { get; set; }
|
||||
public string? Browser { get; set; }
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Volo.Abp.AspNetCore.SignalR;
|
||||
using Yi.Framework.Rbac.Domain.Entities;
|
||||
using Yi.Framework.Rbac.Domain.SignalRHubs.Model;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain.SignalRHubs
|
||||
{
|
||||
[HubRoute("/hub/main")]
|
||||
[Authorize]
|
||||
public class OnlineUserHub : AbpHub
|
||||
{
|
||||
public static readonly List<OnlineUserModel> clientUsers = new();
|
||||
|
||||
|
||||
private HttpContext? _httpContext;
|
||||
private ILogger<OnlineUserHub> _logger=> LoggerFactory.CreateLogger<OnlineUserHub>();
|
||||
public OnlineUserHub(IHttpContextAccessor httpContextAccessor)
|
||||
{
|
||||
_httpContext = httpContextAccessor?.HttpContext;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 成功连接
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override Task OnConnectedAsync()
|
||||
{
|
||||
var name = CurrentUser.UserName;
|
||||
var loginUser = new LoginLogEntity().GetInfoByHttpContext(_httpContext);
|
||||
var user = clientUsers.Any(u => u is not null && u.ConnnectionId == Context.ConnectionId);
|
||||
//判断用户是否存在,否则添加集合
|
||||
if (!user)
|
||||
{
|
||||
OnlineUserModel users = new(Context.ConnectionId)
|
||||
{
|
||||
Browser = loginUser?.Browser,
|
||||
LoginLocation = loginUser?.LoginLocation,
|
||||
Ipaddr = loginUser?.LoginIp,
|
||||
LoginTime = DateTime.Now,
|
||||
Os = loginUser?.Os,
|
||||
UserName = name ?? "Null"
|
||||
};
|
||||
clientUsers.Add(users);
|
||||
_logger.LogInformation($"{DateTime.Now}:{name},{Context.ConnectionId}连接服务端success,当前已连接{clientUsers.Count}个");
|
||||
|
||||
//Clients.All.SendAsync(HubsConstant.MoreNotice, SendNotice());
|
||||
//当有人加入,向全部客户端发送当前总数
|
||||
Clients.All.SendAsync("onlineNum", clientUsers.Count);
|
||||
}
|
||||
|
||||
//Clients.All.SendAsync(HubsConstant.OnlineUser, clientUsers);
|
||||
return base.OnConnectedAsync();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断开连接
|
||||
/// </summary>
|
||||
/// <param name="exception"></param>
|
||||
/// <returns></returns>
|
||||
public override Task OnDisconnectedAsync(Exception exception)
|
||||
{
|
||||
var user = clientUsers.Where(p => p.ConnnectionId == Context.ConnectionId).FirstOrDefault();
|
||||
//判断用户是否存在,否则添加集合
|
||||
if (user != null)
|
||||
{
|
||||
clientUsers.Remove(user);
|
||||
Clients.All.SendAsync("onlineNum", clientUsers.Count);
|
||||
//Clients.All.SendAsync(HubsConstant.OnlineUser, clientUsers);
|
||||
_logger.LogInformation($"用户{user?.UserName}离开了,当前已连接{clientUsers.Count}个");
|
||||
}
|
||||
return base.OnDisconnectedAsync(exception);
|
||||
}
|
||||
|
||||
public async Task SendAllTest(string test)
|
||||
{
|
||||
await Clients.All.SendAsync("ReceiveAllInfo", test);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Import Project="..\..\..\common.props" />
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
<PackageReference Include="IPTools.China" Version="1.6.0" />
|
||||
|
||||
<PackageReference Include="UAParser" Version="3.1.47" />
|
||||
|
||||
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="7.4.3" />
|
||||
|
||||
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="7.4.2" />
|
||||
<PackageReference Include="Volo.Abp.Caching" Version="7.4.2" />
|
||||
|
||||
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\framework\Yi.Framework.SqlSugarCore.Abstractions\Yi.Framework.SqlSugarCore.Abstractions.csproj" />
|
||||
<ProjectReference Include="..\Yi.Framework.Rbac.Domain.Shared\Yi.Framework.Rbac.Domain.Shared.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,853 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Yi.Framework.Rbac.Domain</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.ConfigEntity">
|
||||
<summary>
|
||||
配置表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.ConfigName">
|
||||
<summary>
|
||||
配置名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.ConfigKey">
|
||||
<summary>
|
||||
配置键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.ConfigValue">
|
||||
<summary>
|
||||
配置值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.ConfigType">
|
||||
<summary>
|
||||
配置类别
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.OrderNum">
|
||||
<summary>
|
||||
排序字段
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.ConfigEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.DeptEntity">
|
||||
<summary>
|
||||
部门表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.CreationTime">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.LastModifierId">
|
||||
<summary>
|
||||
最后修改者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.LastModificationTime">
|
||||
<summary>
|
||||
最后修改时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.DeptName">
|
||||
<summary>
|
||||
部门名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.DeptCode">
|
||||
<summary>
|
||||
部门编码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.Leader">
|
||||
<summary>
|
||||
负责人
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.ParentId">
|
||||
<summary>
|
||||
父级id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DeptEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.ListClass">
|
||||
<summary>
|
||||
tag类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.CssClass">
|
||||
<summary>
|
||||
tagClass
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.DictType">
|
||||
<summary>
|
||||
字典类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.DictLabel">
|
||||
<summary>
|
||||
字典标签
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.DictValue">
|
||||
<summary>
|
||||
字典值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryEntity.IsDefault">
|
||||
<summary>
|
||||
是否为该类型的默认值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.DictName">
|
||||
<summary>
|
||||
字典名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.DictType">
|
||||
<summary>
|
||||
字典类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.DictionaryTypeEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.LoginUser">
|
||||
<summary>
|
||||
登录用户
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.LoginLocation">
|
||||
<summary>
|
||||
登录地点
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.LoginIp">
|
||||
<summary>
|
||||
登录Ip
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.Browser">
|
||||
<summary>
|
||||
浏览器
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.Os">
|
||||
<summary>
|
||||
操作系统
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.LoginLogEntity.LogMsg">
|
||||
<summary>
|
||||
登录信息
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.MenuEntity">
|
||||
<summary>
|
||||
菜单表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.CreationTime">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.LastModifierId">
|
||||
<summary>
|
||||
最后修改者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.LastModificationTime">
|
||||
<summary>
|
||||
最后修改时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.MenuName">
|
||||
<summary>
|
||||
菜单名
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.MenuType">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.PermissionCode">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.ParentId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.MenuIcon">
|
||||
<summary>
|
||||
菜单图标
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.Router">
|
||||
<summary>
|
||||
菜单组件路由
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.IsLink">
|
||||
<summary>
|
||||
是否为外部链接
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.IsCache">
|
||||
<summary>
|
||||
是否缓存
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.IsShow">
|
||||
<summary>
|
||||
是否显示
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.Component">
|
||||
<summary>
|
||||
组件路径
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.MenuEntity.Query">
|
||||
<summary>
|
||||
路由参数
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.MenuEntityExtensions">
|
||||
<summary>
|
||||
实体扩展
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Entities.MenuEntityExtensions.Vue3RouterBuild(System.Collections.Generic.List{Yi.Framework.Rbac.Domain.Entities.MenuEntity})">
|
||||
<summary>
|
||||
构建vue3路由
|
||||
</summary>
|
||||
<param name="menus"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity">
|
||||
<summary>
|
||||
操作日志表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.Title">
|
||||
<summary>
|
||||
操作模块
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.OperType">
|
||||
<summary>
|
||||
操作类型
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.RequestMethod">
|
||||
<summary>
|
||||
请求方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.OperUser">
|
||||
<summary>
|
||||
操作人员
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.OperIp">
|
||||
<summary>
|
||||
操作Ip
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.OperLocation">
|
||||
<summary>
|
||||
操作地点
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.Method">
|
||||
<summary>
|
||||
操作方法
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.RequestParam">
|
||||
<summary>
|
||||
请求参数
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.OperationLogEntity.RequestResult">
|
||||
<summary>
|
||||
请求结果
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.PostEntity">
|
||||
<summary>
|
||||
岗位表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.CreationTime">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.LastModifierId">
|
||||
<summary>
|
||||
最后修改者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.LastModificationTime">
|
||||
<summary>
|
||||
最后修改时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.PostCode">
|
||||
<summary>
|
||||
岗位编码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.PostName">
|
||||
<summary>
|
||||
岗位名称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.PostEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.RoleDeptEntity">
|
||||
<summary>
|
||||
角色部门关系表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleDeptEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleDeptEntity.RoleId">
|
||||
<summary>
|
||||
角色id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleDeptEntity.DeptId">
|
||||
<summary>
|
||||
部门id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.RoleEntity">
|
||||
<summary>
|
||||
角色表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.CreationTime">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.LastModifierId">
|
||||
<summary>
|
||||
最后修改者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.LastModificationTime">
|
||||
<summary>
|
||||
最后修改时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.RoleName">
|
||||
<summary>
|
||||
角色名
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.RoleCode">
|
||||
<summary>
|
||||
角色编码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.Remark">
|
||||
<summary>
|
||||
描述
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.DataScope">
|
||||
<summary>
|
||||
角色数据范围
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.RoleMenuEntity">
|
||||
<summary>
|
||||
角色菜单关系表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleMenuEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleMenuEntity.RoleId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.RoleMenuEntity.MenuId">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.UserEntity">
|
||||
<summary>
|
||||
用户表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.IsDeleted">
|
||||
<summary>
|
||||
逻辑删除
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Name">
|
||||
<summary>
|
||||
姓名
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Age">
|
||||
<summary>
|
||||
年龄
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.UserName">
|
||||
<summary>
|
||||
用户名
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Password">
|
||||
<summary>
|
||||
密码
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Salt">
|
||||
<summary>
|
||||
加密盐值
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Icon">
|
||||
<summary>
|
||||
头像
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Nick">
|
||||
<summary>
|
||||
昵称
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Email">
|
||||
<summary>
|
||||
邮箱
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Ip">
|
||||
<summary>
|
||||
Ip
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Address">
|
||||
<summary>
|
||||
地址
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Phone">
|
||||
<summary>
|
||||
电话
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Introduction">
|
||||
<summary>
|
||||
简介
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Remark">
|
||||
<summary>
|
||||
备注
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Sex">
|
||||
<summary>
|
||||
性别
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.DeptId">
|
||||
<summary>
|
||||
部门id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.CreationTime">
|
||||
<summary>
|
||||
创建时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.CreatorId">
|
||||
<summary>
|
||||
创建者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.LastModifierId">
|
||||
<summary>
|
||||
最后修改者
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.LastModificationTime">
|
||||
<summary>
|
||||
最后修改时间
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.OrderNum">
|
||||
<summary>
|
||||
排序
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.State">
|
||||
<summary>
|
||||
状态
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Roles">
|
||||
<summary>
|
||||
角色
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Posts">
|
||||
<summary>
|
||||
岗位
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserEntity.Dept">
|
||||
<summary>
|
||||
部门
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Entities.UserEntity.BuildPassword(System.String)">
|
||||
<summary>
|
||||
构建密码,MD5盐值加密
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Entities.UserEntity.JudgePassword(System.String)">
|
||||
<summary>
|
||||
判断密码和加密后的密码是否相同
|
||||
</summary>
|
||||
<param name="password"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.UserPostEntity">
|
||||
<summary>
|
||||
用户岗位表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserPostEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserPostEntity.UserId">
|
||||
<summary>
|
||||
用户id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserPostEntity.PostId">
|
||||
<summary>
|
||||
岗位id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Entities.UserRoleEntity">
|
||||
<summary>
|
||||
用户角色关系表
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserRoleEntity.Id">
|
||||
<summary>
|
||||
主键
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserRoleEntity.RoleId">
|
||||
<summary>
|
||||
角色id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.Entities.UserRoleEntity.UserId">
|
||||
<summary>
|
||||
用户id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:Yi.Framework.Rbac.Domain.Managers.AccountManager">
|
||||
<summary>
|
||||
用户领域服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.AccountManager.LoginValidationAsync(System.String,System.String,System.Action{Yi.Framework.Rbac.Domain.Entities.UserEntity})">
|
||||
<summary>
|
||||
登录效验
|
||||
</summary>
|
||||
<param name="userName"></param>
|
||||
<param name="password"></param>
|
||||
<param name="userAction"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.AccountManager.ExistAsync(System.String,System.Action{Yi.Framework.Rbac.Domain.Entities.UserEntity})">
|
||||
<summary>
|
||||
判断账户合法存在
|
||||
</summary>
|
||||
<param name="userName"></param>
|
||||
<param name="userAction"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.AccountManager.UserInfoToClaim(Yi.Framework.Rbac.Domain.Shared.Dtos.UserRoleMenuDto)">
|
||||
<summary>
|
||||
令牌转换
|
||||
</summary>
|
||||
<param name="dto"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.AccountManager.UpdatePasswordAsync(System.Guid,System.String,System.String)">
|
||||
<summary>
|
||||
更新密码
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="newPassword"></param>
|
||||
<param name="oldPassword"></param>
|
||||
<returns></returns>
|
||||
<exception cref="T:Volo.Abp.UserFriendlyException"></exception>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.AccountManager.RestPasswordAsync(System.Guid,System.String)">
|
||||
<summary>
|
||||
重置密码
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<param name="password"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.RoleManager.GiveRoleSetMenuAsync(System.Collections.Generic.List{System.Guid},System.Collections.Generic.List{System.Guid})">
|
||||
<summary>
|
||||
给角色设置菜单
|
||||
</summary>
|
||||
<param name="roleIds"></param>
|
||||
<param name="menuIds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.UserManager.GiveUserSetRoleAsync(System.Collections.Generic.List{System.Guid},System.Collections.Generic.List{System.Guid})">
|
||||
<summary>
|
||||
给用户设置角色
|
||||
</summary>
|
||||
<param name="userIds"></param>
|
||||
<param name="roleIds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Managers.UserManager.GiveUserSetPostAsync(System.Collections.Generic.List{System.Guid},System.Collections.Generic.List{System.Guid})">
|
||||
<summary>
|
||||
给用户设置岗位
|
||||
</summary>
|
||||
<param name="userIds"></param>
|
||||
<param name="postIds"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.Repositories.IUserRepository.GetUserAllInfoAsync(System.Guid)">
|
||||
<summary>
|
||||
获取当前登录用户的所有信息
|
||||
</summary>
|
||||
<param name="userId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.SignalRHubs.Model.OnlineUserModel.ConnnectionId">
|
||||
<summary>
|
||||
客户端连接Id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:Yi.Framework.Rbac.Domain.SignalRHubs.Model.OnlineUserModel.UserId">
|
||||
<summary>
|
||||
用户id
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.SignalRHubs.OnlineUserHub.OnConnectedAsync">
|
||||
<summary>
|
||||
成功连接
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:Yi.Framework.Rbac.Domain.SignalRHubs.OnlineUserHub.OnDisconnectedAsync(System.Exception)">
|
||||
<summary>
|
||||
断开连接
|
||||
</summary>
|
||||
<param name="exception"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
@@ -0,0 +1,32 @@
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Volo.Abp.AspNetCore.SignalR;
|
||||
using Volo.Abp.Caching;
|
||||
using Volo.Abp.Domain;
|
||||
using Volo.Abp.Modularity;
|
||||
using Yi.Framework.Mapster;
|
||||
using Yi.Framework.Rbac.Domain.Authorization;
|
||||
using Yi.Framework.Rbac.Domain.Operlog;
|
||||
using Yi.Framework.Rbac.Domain.Shared;
|
||||
|
||||
namespace Yi.Framework.Rbac.Domain
|
||||
{
|
||||
[DependsOn(
|
||||
typeof(YiFrameworkRbacDomainSharedModule),
|
||||
|
||||
typeof(AbpAspNetCoreSignalRModule),
|
||||
typeof(AbpDddDomainModule),
|
||||
typeof(AbpCachingModule)
|
||||
)]
|
||||
public class YiFrameworkRbacDomainModule : AbpModule
|
||||
{
|
||||
public override void ConfigureServices(ServiceConfigurationContext context)
|
||||
{
|
||||
var service = context.Services;
|
||||
service.AddControllers(options =>
|
||||
{
|
||||
options.Filters.Add<PermissionGlobalAttribute>();
|
||||
options.Filters.Add<OperLogGlobalAttribute>();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user