using JNPF.Common.Models.Authorize;
using JNPF.Common.Models.User;
using JNPF.Systems.Entitys.Permission;
using SqlSugar;
namespace JNPF.Common.Core.Manager;
///
/// 用户管理抽象.
///
public interface IUserManager
{
///
/// 用户编号.
///
string UserId { get; }
///
/// 登录类型
///
string LoginType { get; }
///
/// 用户角色.
///
List Roles { get; }
///
/// 数据库连接.
///
ConnectionConfigOptions ConnectionConfig { get; }
///
/// 租户ID.
///
string TenantId { get; }
///
/// 租户数据库名称.
///
string TenantDbName { get; }
///
/// 用户账号.
///
string Account { get; }
///
/// 用户昵称.
///
string RealName { get; }
///
/// 当前用户 ToKen.
///
string ToKen { get; }
///
/// 是否管理员.
///
bool IsAdministrator { get; }
///
/// 获取请求端类型 pc 、 app.
///
string UserOrigin { get; }
///
/// 获取用户的数据范围.
///
List DataScope { get; }
///
/// 用户当前组织及子组织.
///
List Subsidiary { get; }
///
/// 当前用户下属.
///
List Subordinates { get; }
///
/// 用户信息.
///
UserEntity User { get; }
///
/// 获取用户登录信息.
///
///
Task GetUserInfo();
///
/// 获取数据条件.
///
/// 实体.
/// 模块ID.
/// 表主键.
/// 是否开启数据权限.
/// 联表编号.
///
Task> GetConditionAsync(string moduleId, string primaryKey = "F_Id", bool isDataPermissions = true, string tableNumber = "")
where T : new();
///
/// 获取数据条件(带副表) .
///
/// 实体.
/// 模块ID.
/// 表主键.
/// 是否开启数据权限.
///
Task> GetDataConditionAsync(string moduleId, string primaryKey, bool isDataPermissions = true)
where T : new();
///
/// 获取数据条件(在线开发专用).
///
/// 实体.
/// 表主键.
/// 模块ID.
/// 是否开启数据权限.
///
Task> GetCondition(string primaryKey, string moduleId, bool isDataPermissions = true)
where T : new();
///
/// 获取代码生成数据条件.
///
/// 实体.
/// 模块ID.
/// 表主键.
/// 是否开启数据权限.
///
Task> GetCodeGenAuthorizeModuleResource(string moduleId, string primaryKey, bool isDataPermissions = true)
where T : new();
///
/// 获取角色名称 根据 角色Ids.
///
///
///
Task GetRoleNameByIds(string ids);
///
/// 根据角色Ids和组织Id 获取组织下的角色以及全局角色.
///
/// 角色Id集合.
/// 组织Id.
///
Task> GetUserOrgRoleIds(string roleIds, string organizeId);
///
/// 判断是否管理员.
///
///
///
bool IsAdmin(string userId);
///
/// 获取管理员用户id.
///
string GetAdminUserId();
///
/// 域名
///
string Domain{ get; }
}