using OrpaonVision.Core.Results;
using OrpaonVision.Model.Security;
namespace OrpaonVision.Core.Security;
///
/// 用户仓储接口。
///
public interface IUserStore
{
///
/// 根据用户ID获取用户。
///
Task> GetByIdAsync(Guid id);
///
/// 根据用户名获取用户。
///
Task> GetByUsernameAsync(string username);
///
/// 创建用户。
///
Task> CreateAsync(UserModel user);
///
/// 更新用户。
///
Task> UpdateAsync(UserModel user);
///
/// 删除用户。
///
Task DeleteAsync(Guid id);
///
/// 检查用户名是否存在。
///
Task> UsernameExistsAsync(string username);
///
/// 获取用户列表(分页)。
///
Task users, int totalCount)>> GetPagedListAsync(
int pageIndex,
int pageSize,
string? keyword = null,
UserStatus? status = null);
///
/// 更新最后登录信息。
///
Task UpdateLastLoginAsync(Guid userId, string ipAddress);
}
///
/// 角色仓储接口。
///
public interface IRoleStore
{
///
/// 根据角色ID获取角色。
///
Task> GetByIdAsync(Guid id);
///
/// 根据角色名称获取角色。
///
Task> GetByNameAsync(string name);
///
/// 创建角色。
///
Task> CreateAsync(RoleModel role);
///
/// 更新角色。
///
Task> UpdateAsync(RoleModel role);
///
/// 删除角色。
///
Task DeleteAsync(Guid id);
///
/// 检查角色名称是否存在。
///
Task> NameExistsAsync(string name);
///
/// 获取角色列表(分页)。
///
Task roles, int totalCount)>> GetPagedListAsync(
int pageIndex,
int pageSize,
string? keyword = null,
RoleStatus? status = null);
///
/// 获取所有启用的角色。
///
Task>> GetAllEnabledAsync();
}
///
/// 权限仓储接口。
///
public interface IPermissionStore
{
///
/// 根据权限ID获取权限。
///
Task> GetByIdAsync(Guid id);
///
/// 根据权限编码获取权限。
///
Task> GetByCodeAsync(string code);
///
/// 创建权限。
///
Task> CreateAsync(PermissionModel permission);
///
/// 更新权限。
///
Task> UpdateAsync(PermissionModel permission);
///
/// 删除权限。
///
Task DeleteAsync(Guid id);
///
/// 检查权限编码是否存在。
///
Task> CodeExistsAsync(string code);
///
/// 获取权限列表(分页)。
///
Task permissions, int totalCount)>> GetPagedListAsync(
int pageIndex,
int pageSize,
string? keyword = null,
PermissionType? type = null,
PermissionStatus? status = null);
///
/// 根据模块获取权限列表。
///
Task>> GetByModuleAsync(string module);
///
/// 获取所有启用的权限。
///
Task>> GetAllEnabledAsync();
}
///
/// 用户角色仓储接口。
///
public interface IUserRoleStore
{
///
/// 分配角色给用户。
///
Task> AssignAsync(Guid userId, Guid roleId, string grantedBy);
///
/// 取消用户角色分配。
///
Task UnassignAsync(Guid userId, Guid roleId);
///
/// 获取用户的角色列表。
///
Task>> GetUserRolesAsync(Guid userId);
///
/// 获取角色的用户列表。
///
Task>> GetRoleUsersAsync(Guid roleId);
///
/// 检查用户是否拥有指定角色。
///
Task> UserHasRoleAsync(Guid userId, Guid roleId);
///
/// 检查用户是否拥有指定角色名称。
///
Task> UserHasRoleAsync(Guid userId, string roleName);
///
/// 获取用户角色关联记录。
///
Task> GetAssignmentAsync(Guid userId, Guid roleId);
///
/// 更新用户角色关联状态。
///
Task> UpdateAssignmentAsync(UserRoleModel userRole);
///
/// 获取用户角色关联列表(分页)。
///
Task assignments, int totalCount)>> GetPagedListAsync(
int pageIndex,
int pageSize,
Guid? userId = null,
Guid? roleId = null);
}
///
/// 角色权限仓储接口。
///
public interface IRolePermissionStore
{
///
/// 分配权限给角色。
///
Task> AssignAsync(Guid roleId, Guid permissionId, string grantedBy);
///
/// 取消角色权限分配。
///
Task UnassignAsync(Guid roleId, Guid permissionId);
///
/// 获取角色的权限列表。
///
Task>> GetRolePermissionsAsync(Guid roleId);
///
/// 获取权限的角色列表。
///
Task>> GetPermissionRolesAsync(Guid permissionId);
///
/// 检查角色是否拥有指定权限。
///
Task> RoleHasPermissionAsync(Guid roleId, Guid permissionId);
///
/// 检查角色是否拥有指定权限编码。
///
Task> RoleHasPermissionAsync(Guid roleId, string permissionCode);
///
/// 获取角色权限关联记录。
///
Task> GetAssignmentAsync(Guid roleId, Guid permissionId);
///
/// 更新角色权限关联状态。
///
Task> UpdateAssignmentAsync(RolePermissionModel rolePermission);
///
/// 获取角色权限关联列表(分页)。
///
Task assignments, int totalCount)>> GetPagedListAsync(
int pageIndex,
int pageSize,
Guid? roleId = null,
Guid? permissionId = null);
}
///
/// 操作日志仓储接口。
///
public interface IOperationLogStore
{
///
/// 记录操作日志。
///
Result LogAsync(OperationLogModel log);
///
/// 获取操作日志列表(分页)。
///
Result<(IReadOnlyList logs, int totalCount)> GetPagedListAsync(
int pageIndex,
int pageSize,
Guid? userId = null,
OperationType? operationType = null,
string? module = null,
DateTime? startTime = null,
DateTime? endTime = null);
///
/// 获取用户最近的操作日志。
///
Result> GetUserRecentLogsAsync(Guid userId, int count = 10);
///
/// 清理过期日志。
///
Result CleanupExpiredLogsAsync(DateTime expireBefore);
}