Identityserver4添加角色和授权角色的方法

添加角色:

复制代码
        public string AddRole(string roleName)
        {
            if (_roleManager.FindByNameAsync(roleName).Result == null)
            {
                var role = new IdentityRole
                {
                    Name = roleName
                };
                var result = _roleManager.CreateAsync(role).Result;
            }
            return "success";
        }
复制代码

授权角色给用户:

复制代码
        public string AddRolesWithUserName(string userName, string roleNames)
        {
            var user = _userManager.FindByNameAsync(userName).Result;
            var allRoles = _roleManager.Roles.ToList(); //系统中所有的角色
            var nowRoles = _userManager.GetRolesAsync(user).Result; //该用户现有的角色“Name”
            foreach (var nowRole in nowRoles)
            {
                var normalizedName = allRoles.Where(r => r.Name == nowRole).First().NormalizedName;//取得现有角色的NormalizedName
                var deleteResult = _userManager.RemoveFromRoleAsync(user, normalizedName).Result; //删除不要的角色
            }
            var result = _userManager.AddToRolesAsync(user, roleNames.Split(',')).Result; //添加需要的角色
            _userManager.UpdateAsync(user); //完成储存
            return "success";
        }
复制代码

完整的controller

复制代码
public class RoleController : ControllerBase
    {
        private readonly UserManager<IdentityUser> _userManager;
        private readonly RoleManager<IdentityRole> _roleManager;
        private readonly IIdentityServerInteractionService _interaction;
        private readonly IClientStore _clientStore;
        private readonly IAuthenticationSchemeProvider _schemeProvider;
        private readonly IEventService _events;

        public RoleController(
            UserManager<IdentityUser> userManager,
            RoleManager<IdentityRole> roleManager,
            IIdentityServerInteractionService interaction,
            IClientStore clientStore,
            IAuthenticationSchemeProvider schemeProvider,
            IEventService events)
        {
            _userManager = userManager;
            _roleManager = roleManager;
            _interaction = interaction;
            _clientStore = clientStore;
            _schemeProvider = schemeProvider;
            _events = events;
        }

        public string AddRole(string roleName)
        {
            if (_roleManager.FindByNameAsync(roleName).Result == null)
            {
                var role = new IdentityRole
                {
                    Name = roleName
                };
                var result = _roleManager.CreateAsync(role).Result;
            }
            return "success";
        }

        public string AddRolesWithUserName(string userName, string roleNames)
        {
            var user = _userManager.FindByNameAsync(userName).Result;
            var allRoles = _roleManager.Roles.ToList(); //系统中所有的角色
            var nowRoles = _userManager.GetRolesAsync(user).Result; //该用户现有的角色“Name”
            foreach (var nowRole in nowRoles)
            {
                var normalizedName = allRoles.Where(r => r.Name == nowRole).First().NormalizedName;//取得现有角色的NormalizedName
                var deleteResult = _userManager.RemoveFromRoleAsync(user, normalizedName).Result; //删除不要的角色
            }
            var result = _userManager.AddToRolesAsync(user, roleNames.Split(',')).Result; //添加需要的角色
            _userManager.UpdateAsync(user); //完成储存
            return "success";
        }
复制代码

 

posted @   星星c#  阅读(389)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2018-05-04 iis 503 错误 Windows 不能让您登录,因为不能加载您的配置文件。请检查您是否连接到网络
点击右上角即可分享
微信分享提示