Example #1
0
        private void buttonRoleDelete_Click(object sender, EventArgs e)
        {
            if (dataViewRole.SelectedRows.Count > 0)
            {
                int          roleID       = Convert.ToInt16(dataViewRole.SelectedRows[0].Cells[0].Value);
                DialogResult dialogResult = MessageBox.Show("Xác nhận xóa phân quyền", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dialogResult == DialogResult.Yes)
                {
                    try
                    {
                        if (RoleDetail.DeleteRoleDetail(roleID) > 0 && Role.DeleteRole(roleID) > 0)
                        {
                            MessageBox.Show("Xóa phân quyền thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    catch
                    {
                        MessageBox.Show("Lỗi dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }

                refreshDataViewRole();
                refreshDataViewRoleDetail();
            }
        }
Example #2
0
        /// <summary>
        /// 更新角色
        /// </summary>
        /// <param name="role">角色</param>
        public async Task UpdateRoleAsync(RoleDetail role)
        {
            // 更新角色
            var identityRole = await _roleManager.FindByIdAsync(role.Id.ToString());

            identityRole.Name     = role.Name;
            identityRole.Describe = role.Describe;
            await _roleManager.UpdateAsync(identityRole);

            // 找到关联元素
            var elements = new List <string>();

            foreach (var element in role.Elements)
            {
                var ancestorElements = _elementTreeRepository.GetByWhereNoTracking(e => e.Descendant == Guid.Parse(element));
                elements.AddRange(ancestorElements.Select(e => e.Ancestor.ToString()));
                var descendantElemnts = _elementTreeRepository.GetByWhereNoTracking(e => e.Ancestor == Guid.Parse(element));
                elements.AddRange(descendantElemnts.Select(e => e.Descendant.ToString()));
            }
            elements = elements.Distinct().ToList();

            // 更新声明
            await UpdateRoleClaimAsync(identityRole, elements.ToArray(), CustomClaimTypes.Element);
            await UpdateRoleClaimAsync(identityRole, role.Elements.ToArray(), CustomClaimTypes.DisPlayElement);
            await UpdateRoleClaimAsync(identityRole, role.DataRules, CustomClaimTypes.Rule);

            // 清理当前角色的权限缓存
            await _permissionCacheService.ClearRolePermissionCache(identityRole.Name);
        }
Example #3
0
        public async Task <IActionResult> PutRoleDetail([FromRoute] long id, [FromBody] RoleDetail roleDetail)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != roleDetail.RoleId)
            {
                return(BadRequest());
            }

            _context.Entry(roleDetail).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!RoleDetailExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Example #4
0
        public IActionResult Edit(string id)
        {
            var viewModel = new RoleViewModel {
                StatusMessage = StatusMessage
            };

            List <SelectListItem> roleTypes = new List <SelectListItem>();
            var resultList = _context.RoleType.ToList();

            foreach (var item in resultList)
            {
                roleTypes.Add(new SelectListItem {
                    Value = item.Id.ToString(), Text = item.Type
                });
            }

            var roleInDb = _context.Roles.SingleOrDefault(c => c.Id == id);
            var role     = new RoleDetail()
            {
                RoleId = id
            };

            role.Name        = roleInDb.Name;
            role.TypeId      = _context.RoleTypes.SingleOrDefault(c => c.RoleId == id).Id;
            role.Type        = _context.RoleType.SingleOrDefault(c => c.Id == role.TypeId);
            role.Description = _context.RoleDescriptions.SingleOrDefault(c => c.RoleId == role.RoleId).Description;

            viewModel.Role      = role;
            viewModel.RoleTypes = roleTypes;

            return(View(viewModel));
        }
Example #5
0
        public async Task <IdentityManagerResult <RoleDetail> > GetRoleAsync(string subject)
        {
            ValidateSupportsRoles();

            TRoleKey key  = ConvertRoleSubjectToKey(subject);
            var      role = await this.roleManager.FindByIdAsync(key);

            if (role == null)
            {
                return(new IdentityManagerResult <RoleDetail>((RoleDetail)null));
            }

            var result = new RoleDetail
            {
                Subject = subject,
                Name    = role.Name,
                // Description
            };

            var metadata = await GetMetadataAsync();

            var props =
                from prop in metadata.RoleMetadata.UpdateProperties
                select new PropertyValue
            {
                Type  = prop.Type,
                Value = GetRoleProperty(prop, role)
            };

            result.Properties = props.ToArray();

            return(new IdentityManagerResult <RoleDetail>(result));
        }
        public RoleDetailResource(RoleDetail role, UrlHelper url, RoleMetadata meta)
        {
            if (role == null)
            {
                throw new ArgumentNullException("role");
            }
            if (url == null)
            {
                throw new ArgumentNullException("url");
            }
            if (meta == null)
            {
                throw new ArgumentNullException("meta");
            }

            Data = new RoleDetailDataResource(role, url, meta);

            var links = new Dictionary <string, string>();

            if (meta.SupportsDelete)
            {
                links["Delete"] = url.Link(Constants.RouteNames.DeleteRole, new { subject = role.Subject });
            }
            this.Links = links;
        }
Example #7
0
        /// <summary>
        /// 更新角色
        /// </summary>
        /// <param name="role">角色</param>
        public async Task UpdateRoleAsync(RoleDetail role)
        {
            // 更新角色
            var identityRole = await _roleManager.FindByIdAsync(role.Id.ToString());

            identityRole.Name     = role.Name;
            identityRole.Describe = role.Describe;
            await _roleManager.UpdateAsync(identityRole);

            // 找到关联元素
            var elementIds = new List <Guid>();

            foreach (var element in role.Elements)
            {
                var ancestorIds = from et in _elementTreeRepository.GetAllNoTracking()
                                  where et.Descendant.ToString() == element
                                  select et.Ancestor;
                elementIds.AddRange(ancestorIds);
                var descendantIds = from et in _elementTreeRepository.GetAllNoTracking()
                                    where et.Ancestor.ToString() == element
                                    select et.Descendant;
                elementIds.AddRange(descendantIds);
            }
            var ids = from id in elementIds.Distinct().ToList()
                      select id.ToString();

            // 更新声明
            await UpdateRoleClaimAsync(identityRole, ids.ToArray(), CustomClaimTypes.Element);
            await UpdateRoleClaimAsync(identityRole, role.Elements.ToArray(), CustomClaimTypes.DisPlayElement);
            await UpdateRoleClaimAsync(identityRole, role.DataRules, CustomClaimTypes.Rule);
        }
Example #8
0
        /// <summary>
        /// Isi data dari setiap menu di MenuStrip ke tabel role_detail
        /// </summary>
        /// <param name="toolStripItemCollection">ToolStripItemCollection MenuStrip</param>
        private void PopulateMenuStrip(ToolStripItemCollection toolStripItemCollection)
        {
            foreach (var menu in toolStripItemCollection)
            {
                // Lewati menu jika bukan MenuItem (bisa saja Separator atau ComboBox)
                if (!(menu is ToolStripMenuItem))
                {
                    continue;
                }

                var menuItem = (ToolStripMenuItem)menu;

                // Lewati Menu yang mempunyai Tag ignore
                if (menuItem.TagIgnore())
                {
                    continue;
                }

                var roleDetail = new RoleDetail()
                {
                    role_kode   = RoleKode,
                    menu_name   = menuItem.Tag.ToString(),
                    menu_parent = menuItem.AccessibleDescription, // Menu header (parent) di MenuStrip
                    form_action = null,
                    tag         = menuItem.AccessibleName
                };

                // Simpan data Menu ke tabel role_detail
                _roleDetailController.Save(roleDetail);

                PopulateMenuStrip(menuItem.DropDownItems); // Recursive method
            }
        }
Example #9
0
 //  adds
 public static bool IsMaintenanceAllowed(string name)
 {
     using (DBContext context = new DBContext())
     {
         User user = context.Users.Where(o => o.UserName == name).SingleOrDefault();
         if (user == null)
         {
             return(false);
         }
         UserRole role = GetUserRole(user.UserId);
         if (role == null)
         {
             return(false);
         }
         RoleDetail detail = GetRoleDetail(role.RoleId);
         if (detail == null)
         {
             return(false);
         }
         if (detail.IsAllowed)
         {
             return(true);
         }
         return(false);
     }
 }
        public RoleDetailResource(RoleDetail role, IUrlHelper url, RoleMetadata meta)
        {
            if (role == null)
            {
                throw new ArgumentNullException(nameof(role));
            }
            if (url == null)
            {
                throw new ArgumentNullException(nameof(url));
            }
            if (meta == null)
            {
                throw new ArgumentNullException(nameof(meta));
            }

            Data = new RoleDetailDataResource(role, url, meta);

            var links = new Dictionary <string, string>();

            if (meta.SupportsDelete)
            {
                links["delete"] = url.Link(IdentityManagerConstants.RouteNames.DeleteRole, new { subject = role.Subject });
            }
            Links = links;
        }
Example #11
0
        // GET: /RoleDetail/Details/5
        public ActionResult Details(int id)
        {
            UserPermissionAction("RoleDetail", RoleAction.detail.ToString());
            CheckPermission();
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            RoleDetail roeldetails = _RoleDetailService.GetRoleDetail(id);

            Mapper.CreateMap <EveryWhereCars.Entity.RoleDetail, EveryWhereCars.Models.RoleDetailModel>();

            EveryWhereCars.Models.RoleDetailModel roledetailmodel = Mapper.Map <EveryWhereCars.Entity.RoleDetail, EveryWhereCars.Models.RoleDetailModel>(roeldetails);
            RoleModel rolemodel = new RoleModel();

            rolemodel.RoleName   = _RoleService.GetRole(roledetailmodel.RoleId).RoleName;
            roledetailmodel.Role = rolemodel;
            FormModel formmodel = new FormModel();

            formmodel.FormName   = _FormService.GetForm(roledetailmodel.FormId).FormName;
            roledetailmodel.form = formmodel;
            if (roledetailmodel == null)
            {
                return(HttpNotFound());
            }
            return(View(roledetailmodel));
        }
Example #12
0
        public RoleDetail UserPermission(string ControllerName)
        {
            RoleDetail roleDetail = new RoleDetail();

            try
            {
                if (ExcludePublicController().Contains(ControllerName.ToLower()))
                {
                    //Set True for Each Operation
                    roleDetail.IsView     = true;
                    roleDetail.IsCreate   = true;
                    roleDetail.IsEdit     = true;
                    roleDetail.IsDelete   = true;
                    roleDetail.IsDetail   = true;
                    roleDetail.IsDownload = true;
                }
                else
                {
                    roleDetail = (HttpContext.Current.Session["UserPermission"] as List <EveryWhereCars.Entities.RoleDetail>).Where(z => z.form.ControllerName.ToLower().Trim() == ControllerName.ToLower().Trim()).FirstOrDefault();
                }
            }
            catch (Exception ex)
            {
                //Set False for Each Operation
                roleDetail.IsView     = false;
                roleDetail.IsCreate   = false;
                roleDetail.IsEdit     = false;
                roleDetail.IsDelete   = false;
                roleDetail.IsDetail   = false;
                roleDetail.IsDownload = false;
            }
            return(roleDetail);
        }
        public async Task <IdentityManagerResult <RoleDetail> > GetRoleAsync(string subject)
        {
            ValidateSupportsRoles();

            var role = await RoleManager.FindByIdAsync(subject);

            if (role == null)
            {
                return(new IdentityManagerResult <RoleDetail>((RoleDetail)null));
            }

            var result = new RoleDetail
            {
                Subject = subject,
                Name    = role.Name,
                // TODO: Role Description
            };

            var metadata = await GetMetadataAsync();

            var props = new List <PropertyValue>();

            foreach (var prop in metadata.RoleMetadata.UpdateProperties)
            {
                props.Add(new PropertyValue
                {
                    Type  = prop.Type,
                    Value = await GetRoleProperty(prop, role)
                });
            }

            result.Properties = props.ToArray();

            return(new IdentityManagerResult <RoleDetail>(result));
        }
Example #14
0
        public async Task <IdentityManagerResult <RoleDetail> > GetRoleAsync(string subject)
        {
            var role = roles.SingleOrDefault(x => x.ID == subject);

            if (role == null)
            {
                return(new IdentityManagerResult <RoleDetail>((RoleDetail)null));
            }


            var props = new List <PropertyValue>();

            foreach (var prop in GetMetadata().RoleMetadata.UpdateProperties)
            {
                props.Add(new PropertyValue
                {
                    Type  = prop.Type,
                    Value = await GetRoleProperty(prop, role)
                });
            }

            var detail = new RoleDetail
            {
                Subject     = role.ID,
                Name        = role.Name,
                Description = role.Description,
                Properties  = props
            };

            return(new IdentityManagerResult <RoleDetail>(detail));
        }
Example #15
0
 /// <summary>
 /// 保存配置
 /// </summary>
 public void Save()
 {
     if (this.Roles == null || this.Roles.Count == 0)
     {
         this.Roles = RoleDetail.Load();
     }
     RIPP.Lib.Serialize.Write <Config>(this, this._filepath);
     Common.Reload();
 }
Example #16
0
        public ActionResult DeleteConfirmed(int id)
        {
            UserPermissionAction("RoleDetail", RoleAction.delete.ToString());
            CheckPermission();

            RoleDetail roeldetails = _RoleDetailService.GetRoleDetail(id);

            _RoleDetailService.DeleteRoleDetail(roeldetails);
            TempData["ShowMessage"] = "success";
            TempData["MessageBody"] = "RoleDetail is deleted successfully.";
            return(RedirectToAction("Index"));
        }
Example #17
0
        public async Task <IActionResult> PostRoleDetail([FromBody] RoleDetail roleDetail)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.RoleDetail.Add(roleDetail);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetRoleDetail", new { id = roleDetail.RoleId }, roleDetail));
        }
Example #18
0
        //Reload dateViewRoldeDetail
        private void dataViewRole_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataViewRole.SelectedRows.Count > 0)
            {
                // Get RoleDetail's datatable
                int       roleID          = Convert.ToInt16(dataViewRole.SelectedRows[0].Cells[0].Value);
                DataTable roleDetailTable = RoleDetail.GetListStaffFunction(roleID);

                // Set data source to dataview for searching
                dataViewRoleDetail.DataSource = roleDetailTable;
            }
        }
Example #19
0
        public ApiResponse Show(long id)
        {
            RoleDetail roleDetail     = null;
            var        roleRepository = this.roleApplication.DetailById(id);

            if (roleRepository.Id != 0)
            {
                roleDetail = new RoleDetail(roleRepository);
            }

            return(new ApiResponseData(HttpStatusCode.OK, roleDetail));
        }
        public int Save(RoleDetail obj)
        {
            var result = 0;

            using (IDapperContext context = new DapperContext())
            {
                _repository = new RoleDetailRepository(context);
                result      = _repository.Save(obj);
            }

            return(result);
        }
Example #21
0
        public async Task <IActionResult> AddRole([FromBody] RoleDetail role)
        {
            var result = await _roleService.AddRoleAsync(role);

            if (result)
            {
                return(Ok());
            }
            else
            {
                ModelState.AddModelError("RoleName", ErrorMessages.WebAdmin_Role_E001);
                return(BadRequest(ModelState));
            }
        }
Example #22
0
        private void buttonOk_Click(object sender, EventArgs e)
        {
            if (!superValidator1.Validate())
            {
                return;
            }
            try
            {
                if ("edit".Equals(this.UserAction))
                {
                    DialogResult dialogResult = MessageBox.Show("Xác nhận cập nhập thông tin phân quyền", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dialogResult == DialogResult.Yes)
                    {
                        Role editRole = new Role(int.Parse(textBoxRoleID.Text), textBoxRoleName.Text);

                        if (Role.UpdateRole(editRole) > 0)
                        {
                            RoleDetail.DeleteRoleDetail(roleDetail.RoleID);
                            for (int i = 0; i < listBoxCurrentFunctionID.Items.Count; i++)
                            {
                                RoleDetail newRD = new RoleDetail(roleDetail.RoleID, int.Parse(listBoxCurrentFunctionID.Items[i].ToString()));
                                RoleDetail.InsertRoleDetail(newRD);
                            }
                            MessageBox.Show("Cập nhập cập nhập thông tin phân quyền thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else
                {
                    Role newRole = new Role(0, textBoxRoleName.Text);
                    if (Role.InsertRole(newRole) > 0)
                    {
                        int currentIdent = Role.GetCurrentIdentity();
                        for (int i = 0; i < listBoxCurrentFunctionID.Items.Count; i++)
                        {
                            RoleDetail newRD = new RoleDetail(currentIdent, int.Parse(listBoxCurrentFunctionID.Items[i].ToString()));
                            RoleDetail.InsertRoleDetail(newRD);
                        }
                        MessageBox.Show("Thêm phân quyền thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch
            {
                MessageBox.Show("Lỗi dữ liệu", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            this.Close();
        }
Example #23
0
        public void CreateRoleDetails(int roleID, List <RoleDetailModel> roleDetailList)
        {
            MQUESTSYSEntities ent = new MQUESTSYSEntities();

            foreach (var roleDetail in roleDetailList)
            {
                roleDetail.RoleID = roleID;

                RoleDetail obj = new RoleDetail();
                ObjectHelper.CopyProperties(roleDetail, obj);
                ent.AddToRoleDetail(obj);
            }

            ent.SaveChanges();
        }
Example #24
0
        private void btnXoa_Click(object sender, EventArgs e)
        {
            RoleDetail r = context.RoleDetails.Where(x => x.Id.ToString() == txtMaChiTiet.Text).FirstOrDefault();

            if (r != null)
            {
                context.RoleDetails.Remove(r);
                context.SaveChanges();
                Display();
            }
            else
            {
                MessageBox.Show("Không tìm thấy mã phù hợp");
            }
        }
Example #25
0
        /// <summary>
        /// Method yang digunakan untuk menyimpan node yang tercentang ke tabel role_detail
        /// </summary>
        /// <param name="listRoleDetail">Data RoleDetail</param>
        /// <param name="roleKode">Role kode</param>
        /// <param name="menuParent">Menu (parent/header) terpilih</param>
        /// <param name="nodes">TreeNodeCollection TreeView</param>
        private void InsertItemChecked(List <RoleDetail> listRoleDetail, string roleKode
                                       , string menuParent, TreeNodeCollection nodes)
        {
            // Looping node di TreeView
            foreach (TreeNode node in nodes)
            {
                // Hanya menyimpan node yang tercentang
                if (node.Checked)
                {
                    // Buat instance object NodeTag dari Tag pada node
                    var nodeTag = (NodeTag)node.Tag;

                    RoleDetail roleDetail = new RoleDetail();
                    roleDetail.role_kode   = roleKode;
                    roleDetail.tag         = nodeTag.Tag; // menu / menuForm / action
                    roleDetail.menu_parent = menuParent;  // Menu header (parent) di MenuStrip

                    switch (roleDetail.tag)
                    {
                    case "menu":

                        roleDetail.menu_name   = node.Text; // Menu tag
                        roleDetail.form_action = null;

                        break;

                    case "menuForm":

                        roleDetail.menu_name   = nodeTag.FormAction; // Form name
                        roleDetail.form_action = null;

                        break;

                    case "action":

                        roleDetail.menu_name   = node.Text;          // Button Tag/Text
                        roleDetail.form_action = nodeTag.FormAction; // Form name

                        break;
                    }

                    // Tambahkan object RoleDetail ke list
                    listRoleDetail.Add(roleDetail);
                }

                InsertItemChecked(listRoleDetail, roleKode, menuParent, node.Nodes); // Recursive method
            }
        }
Example #26
0
 public static int DeleteModule(int id)
 {
     using (DBContext context = new DBContext())
     {
         Module _data = context.Modules.Find(id);
         context.Entry(_data).State = System.Data.Entity.EntityState.Deleted;
         context.SaveChanges();
         foreach (RoleDetail item in Helper.GetRoleDetailListByModuleID(id))
         {
             RoleDetail _RoleDetail = context.RoleDetails.Find(item.Id);
             context.Entry(_RoleDetail).State = System.Data.Entity.EntityState.Deleted;
             context.SaveChanges();
         }
     }
     return(1);
 }
Example #27
0
    public async Task <RoleDetail> GetRoleAsync(Guid roleId)
    {
        var role = await _roleRepository.GetRoleAsync(roleId);

        var result = new RoleDetail
        {
            Id            = role.Id,
            Name          = role.Name,
            IsEnabled     = role.IsEnabled,
            PermissionIds = role.RolePermissions
                            .Select(x => x.PermissionId)
                            .ToList(),
        };

        return(result);
    }
Example #28
0
        private void GrantRole()
        {
            DataTable dtRoleDetail = RoleDetail.GetListStaffFunction(loginStaff.RoleID);

            for (int i = 0; i < dtRoleDetail.Rows.Count; i++)
            {
                String tabName = dtRoleDetail.Rows[i][2].ToString();
                for (int j = 0; j < tabMain.Tabs.Count; j++)
                {
                    if (tabMain.Tabs[j].Name == tabName)
                    {
                        tabMain.Tabs[j].Visible = true;
                        break;
                    }
                }
            }
        }
        public async Task <IdentityManagerResult <RoleDetail> > GetRoleAsync(string subject)
        {
            ValidateSupportsGroups();

            Guid g;

            if (!Guid.TryParse(subject, out g))
            {
                return(new IdentityManagerResult <RoleDetail>("Invalid subject"));
            }

            try
            {
                var group = this.groupService.Get(g);
                if (group == null)
                {
                    return(new IdentityManagerResult <RoleDetail>((RoleDetail)null));
                }

                var role = new RoleDetail
                {
                    Subject = subject,
                    Name    = group.Name,
                    //Description = group.Name
                };

                var metadata = await GetMetadataAsync();

                var props = new List <PropertyValue>();
                foreach (var prop in metadata.RoleMetadata.UpdateProperties)
                {
                    props.Add(new PropertyValue
                    {
                        Type  = prop.Type,
                        Value = GetGroupProperty(prop, group)
                    });
                }
                role.Properties = props.ToArray();

                return(new IdentityManagerResult <RoleDetail>(role));
            }
            catch (ValidationException ex)
            {
                return(new IdentityManagerResult <RoleDetail>(ex.Message));
            }
        }
Example #30
0
        private void btnSua_Click(object sender, EventArgs e)
        {
            RoleDetail r = context.RoleDetails.Where(x => x.Id.ToString() == txtMaChiTiet.Text).FirstOrDefault();

            if (r != null)
            {
                r.NameAction = txtTenChiTiet.Text;
                r.IdEmployee = Convert.ToInt32(cbTenNhanVien.SelectedValue.ToString());
                r.IdRole     = Convert.ToInt32(cbTenQuyen.SelectedValue.ToString());
                context.SaveChanges();
                Display();
            }
            else
            {
                MessageBox.Show("Không tìm thấy mã phù hợp");
            }
        }
        public Task<IdentityManagerResult<RoleDetail>> GetRoleAsync(string subject)
        {
            var role = this.roles.SingleOrDefault(x => x.ID == subject);
            if (role == null)
            {
                return Task.FromResult(new IdentityManagerResult<RoleDetail>((RoleDetail)null));
            }

            var props = new List<PropertyValue>();
            foreach (var prop in GetMetadata().RoleMetadata.UpdateProperties)
            {
                props.Add(new PropertyValue
                {
                    Type = prop.Type,
                    Value = GetRoleProperty(prop, role)
                });
            }

            var detail = new RoleDetail
            {
                Subject = role.ID,
                Name = role.Name,
                Description = role.Description,
                Properties = props
            };
            
            return Task.FromResult(new IdentityManagerResult<RoleDetail>(detail));
        }