造轮子之角色管理
1.Asp.Net Core造轮之旅:逐步构建自己的开发框架-目录2.asp.net core之Startup3.asp.net core之依赖注入4.asp.net core之中间件5.asp.net core之Host6.asp.net core之Kestrel7.asp.net core之配置8.asp.net core之Options9.asp.net core之日志10.asp.net core之路由11.asp.net core之异常处理12.asp.net core之HttpClient13.asp.net core之实时应用14.asp.net core之EfCore15.造轮子之自动依赖注入16.造轮子之日志17.造轮子之统一业务异常处理18.造轮子之统一请求响应格式19.造轮子之缓存20.造轮子之ORM集成21.造轮子之asp.net core identity22.造轮子之自定义授权策略23.造轮子之权限管理24.造轮子之多语言管理
25.造轮子之角色管理
26.造轮子之用户管理27.造轮子之菜单管理28.造轮子之属性注入配合懒加载构建服务抽象基类29.造轮子之EventBus30.造轮子之消息实时推送31.造轮子之种子数据32.造轮子之集成GraphQL33.造轮子之设置管理34.造轮子之文件管理35.造轮子之单层应用总结篇36.单层应用升级到多层应用137.单层应用升级到多层应用238.单层应用升级到多层应用3在asp.net core identity中已经有RoleManager,我们只需要封装一下API操作Role即可完成我们角色管理相关功能,这里API打算只提供分页查询,创建以及删除,不提供修改API。
实现RoleManageAppService#
IRoleManageAppService
namespace Wheel.Services.Roles
{
public interface IRoleManageAppService : ITransientDependency
{
Task<Page<RoleDto>> GetRolePageList(PageRequest pageRequest);
Task<R> CreateRole(CreateRoleDto dto);
Task<R> DeleteRole(string roleName);
}
}
RoleManageAppService
namespace Wheel.Services.Roles
{
public class RoleManageAppService : WheelServiceBase, IRoleManageAppService
{
private readonly RoleManager<Role> _roleManager;
private readonly IBasicRepository<Role, string> _roleRepository;
public RoleManageAppService(RoleManager<Role> roleManager, IBasicRepository<Role, string> roleRepository)
{
_roleManager = roleManager;
_roleRepository = roleRepository;
}
public async Task<Page<RoleDto>> GetRolePageList(PageRequest pageRequest)
{
var (items, total) = await _roleRepository.SelectPageListAsync(
a => true,
a => new RoleDto { Id = a.Id, Name = a.Name },
(pageRequest.PageIndex - 1) * pageRequest.PageSize,
pageRequest.PageSize,
pageRequest.OrderBy
);
return new Page<RoleDto>(items, total);
}
public async Task<R> CreateRole(CreateRoleDto dto)
{
var exist = await _roleManager.RoleExistsAsync(dto.Name);
if (exist)
{
throw new BusinessException(ErrorCode.RoleExist, "RoleExist");
}
var result = await _roleManager.CreateAsync(new Role(dto.Name, dto.RoleType));
if(result.Succeeded)
{
return new R();
}
else
{
throw new BusinessException(ErrorCode.CreateRoleError, string.Join("\r\n", result.Errors.Select(a => a.Description)));
}
}
public async Task<R> DeleteRole(string roleName)
{
var exist = await _roleManager.RoleExistsAsync(roleName);
if (exist)
{
var role = await _roleManager.FindByNameAsync(roleName);
await _roleManager.DeleteAsync(role);
}
else
{
throw new BusinessException(ErrorCode.RoleNotExist, "RoleNotExist");
}
return new R();
}
}
}
实现RoleManageController#
namespace Wheel.Controllers
{
/// <summary>
/// 角色管理
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class RoleManageController : WheelControllerBase
{
private readonly IRoleManageAppService _roleManageAppService;
public RoleManageController(IRoleManageAppService roleManageAppService)
{
_roleManageAppService = roleManageAppService;
}
/// <summary>
/// 创建角色
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpPost]
public async Task<R> CreateRole(CreateRoleDto dto)
{
return await _roleManageAppService.CreateRole(dto);
}
/// <summary>
/// 删除角色
/// </summary>
/// <param name="roleName"></param>
/// <returns></returns>
[HttpDelete]
public async Task<R> DeleteRole(string roleName)
{
return await _roleManageAppService.DeleteRole(roleName);
}
/// <summary>
/// 角色分页查询
/// </summary>
/// <param name="pageRequest"></param>
/// <returns></returns>
[HttpGet("Page")]
public async Task<Page<RoleDto>> GetRolePageList([FromQuery]PageRequest pageRequest)
{
return await _roleManageAppService.GetRolePageList(pageRequest);
}
}
}
非常简单就实现了一个角色管理的API。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?