首页 > 其他分享 >造轮子之角色管理

造轮子之角色管理

时间:2023-10-12 11:55:46浏览次数:29  
标签:Task 角色 管理 await roleManager pageRequest 轮子 new public

在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。

轮子仓库地址https://github.com/Wheel-Framework/Wheel
欢迎进群催更。

image.png

标签:Task,角色,管理,await,roleManager,pageRequest,轮子,new,public
From: https://www.cnblogs.com/fanshaoO/p/17759173.html

相关文章

  • 造轮子之用户管理
    跟角色管理一样,asp.netcoreidentity中已经包含了UserManager,我们只需要简单包装一下逻辑即可完成我们的用户管理相关功能。这里只打算添加分页查询,创建以及修改用户的API,不提供删除API。实现UserManageAppServiceIUserManageAppServicenamespaceWheel.Services.Users{......
  • 捕捉回忆的时光机:用AI智能管理的NAS,提升整理效率
    记忆会模糊,但照片不会,每次打开照片的时候背后的故事就会浮现在我们眼前。当然,我们现在的设备也越来越多了,当我们要找某一张照片时总是需要从散落在各个设备里的照片库寻找,花费大量时间。而TerraPhotos的出现,无论是很多年前的照片,奔赴世界各地的打卡记录,每个陪我们走过一段时间的......
  • 软件项目管理、开发、配套支撑等全文档整理
    前言:在软件开发过程中,编写和维护相关文档是非常重要的。这些文档不仅可以帮助开发团队更好地了解项目需求、设计和实现方案,还可以提高开发效率、保证软件质量以及降低维护成本。下面将介绍软件开发过程中常见的几类文档。1、需求分析文档需求分析文档是软件开发过程中最重要的......
  • nittest单元测试框架—加载测试用例的3种方法以及测试报告存储管理
     项目结构 测试用例importunittestclassLoginTestCase(unittest.TestCase):deftest_login_success(self):self.assertEqual({'code':200,'msg':'登录成功'},self.login('kobe','666'))deftest_......
  • 聊聊Maven的依赖传递、依赖管理、依赖作用域
    1.依赖传递在Maven中,依赖是会传递的,假如在业务项目中引入了spring-boot-starter-web依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> <version>2.7.4</version></depe......
  • 【算法】游戏中的学习,使用c#面向对象特性控制游戏角色移动
    最近,小悦的生活像是一首繁忙的交响曲,每天忙得团团转,虽然她的日程安排得满满当当,但她并未感到充实。相反,她很少有时间陪伴家人,这让她感到有些遗憾。在周五的午后,小悦的哥哥突然打来电话,他的声音里充满了焦虑。“小悦,我有个事情想拜托你。”哥哥的声音传来。小悦不禁有些疑惑,哥哥......
  • 金蝶云星空,采购单下推收货通知单没有收料组织、采购组织问题:未启用库存管理
          ......
  • 银行账户管理系统
    以下是一个复杂的C++代码示例,用于实现一个简单的银行账户管理系统:#include<iostream>#include<vector>#include<algorithm>classTransaction{private:doubleamount;std::stringtype;public:Transaction(doubleamount,std::stringtype){......
  • 网络规划设计师真题解析--SNMP管理(安全威胁)
    在网络管理中要防范各种安全威胁。在SNMP管理中,无法防范的安全威胁是(35)。A.篡改管理信息:通过改变传输中的SNMP报文实施未经授权的管理操作B.通信分析:第三者分析管理实体之间的通信规律,从而获取管理信息C.假冒合法用户:未经授权的用户冒充授权用户,企图实施管理操作D.截获:未经授权......
  • 10.11(动物园管理员)
    第一版:把每种动物都定义为一个类,漏洞大,每天加一种动物或者动物数量发生变化都会需要对代码进行调整每种动物的喂食函数名也不同packagehomework;publicclasstext{publicstaticvoidmain(Stringargs[]){Feederf=newFeeder("小王");......