public void AddSpecialPermissionsToRole(int roleId, IList <int> specialPermissionsIds) { if (specialPermissionsIds == null || specialPermissionsIds.Count == 0) { return; } var userGroup = m_permissionRepository.InvokeUnitOfWork(x => x.FindById <RoleUserGroup>(roleId)); var roleClient = m_communicationProvider.GetAuthRoleApiClient(); var permissionClient = m_communicationProvider.GetAuthPermissionApiClient(); var defaultUnregisteredRole = m_defaultUserProvider.GetDefaultUnregisteredRole(); var permissions = roleClient.GetRoleAsync(userGroup.ExternalId, true).GetAwaiter().GetResult().Permissions; var permissionsId = permissions.Select(x => x.Id).ToList(); foreach (var permissionToAdd in specialPermissionsIds) { if (!permissionsId.Contains(permissionToAdd)) { var permission = permissionClient.GetPermissionAsync(permissionToAdd).GetAwaiter().GetResult(); // Deny assigning special permissions to Unregistered user (not logged in) if (defaultUnregisteredRole.Id == userGroup.ExternalId && !permission.Name.Contains(VokabularPermissionNames.AutoImport) && !permission.Name.Contains(VokabularPermissionNames.CardFile)) { throw new ArgumentException($"Special permissions cannot be added to the default role {defaultUnregisteredRole.Name}."); } permissionsId.Add(permissionToAdd); } } roleClient.AssignPermissionsToRoleAsync(userGroup.ExternalId, permissionsId).GetAwaiter().GetResult(); }
protected override void ExecuteWorkImplementation() { CheckRoleForUpdating(m_defaultUserProvider.GetDefaultUnregisteredRole()); CheckRoleForUpdating(m_defaultUserProvider.GetDefaultRegisteredRole()); var group = m_permissionRepository.FindById <UserGroup>(m_data.Id); group.Name = m_data.Name; group.LastChange = DateTime.UtcNow; m_permissionRepository.Save(group); m_permissionRepository.Flush(); if (group is RoleUserGroup roleUserGroup) { var client = m_communicationProvider.GetAuthRoleApiClient(); var authRole = client.GetRoleAsync(roleUserGroup.ExternalId).GetAwaiter().GetResult(); authRole.Name = m_data.Name; authRole.Description = m_data.Description; client.EditRoleAsync(roleUserGroup.ExternalId, authRole).GetAwaiter().GetResult(); } else { throw new InvalidOperationException($"Only RoleUserGroup can be updated by this method, argument type was: {group.GetType()}"); } }
protected override int ExecuteWorkImplementation() { var now = DateTime.UtcNow; var client = m_communicationProvider.GetAuthRoleApiClient(); var roleContract = new RoleContractBase { Description = m_description, Name = m_roleName, }; var response = client.CreateRoleAsync(roleContract).GetAwaiter().GetResult(); var externalRoleId = response.Content.ReadAsInt(); var group = new RoleUserGroup { Name = m_roleName, CreateTime = now, LastChange = now, ExternalId = externalRoleId, }; var roleId = m_permissionRepository.CreateGroup(group); return(roleId); }
public PagedResultList <UserContract> GetUsersByGroup(int groupId, int?start, int?count, string filterByName) { // Method required for Role management (select role, load users) var role = m_permissionRepository.InvokeUnitOfWork(x => x.FindById <UserGroup>(groupId)); if (role is RoleUserGroup roleUserGroup) { // If UserGroup has relation to Roles on Auth service, use user list from Auth service (the main data source) var client = m_communicationProvider.GetAuthRoleApiClient(); var result = client.GetUserListByRoleAsync(roleUserGroup.ExternalId, start, count, filterByName).GetAwaiter().GetResult(); var users = m_mapper.Map <List <UserContract> >(result.Items); m_userDetailManager.AddIdForExternalUsers(users); return(new PagedResultList <UserContract> { List = users, TotalCount = result.ItemsCount }); } else { // If UserGroup has no relation to Auth service (permissions to books), use local user list var startValue = PagingHelper.GetStart(start); var countValue = PagingHelper.GetCount(count); var dbUsers = m_userRepository.InvokeUnitOfWork(x => x.GetUsersByGroup(groupId, startValue, countValue, filterByName)); var resultList = new List <UserContract>(); foreach (var dbUser in dbUsers.List) { var resultUser = m_mapper.Map <UserContract>(dbUser); resultUser.FirstName = dbUser.ExtFirstName; resultUser.LastName = dbUser.ExtLastName; resultUser.UserName = dbUser.ExtUsername; resultList.Add(resultUser); } return(new PagedResultList <UserContract> { List = resultList, TotalCount = dbUsers.Count, }); } }
protected override void ExecuteWorkImplementation() { if (m_roleContract == null) { m_roleContract = m_communicationProvider.GetAuthRoleApiClient().GetRoleAsync(m_externalRoleId).GetAwaiter() .GetResult(); } var group = m_permissionRepository.FindGroupByExternalIdOrCreate(m_roleContract.Id); LocalId = group.Id; if (group.Name != m_roleContract.Name) { group.Name = m_roleContract.Name; group.LastChange = DateTime.UtcNow; m_permissionRepository.Save(group); m_permissionRepository.Flush(); } }
protected override void ExecuteWorkImplementation() { CheckRoleForDeleting(m_defaultUserProvider.GetDefaultUnregisteredRole()); CheckRoleForDeleting(m_defaultUserProvider.GetDefaultRegisteredRole()); var group = m_permissionRepository.FindById <UserGroup>(m_roleId); m_permissionRepository.Delete(group); m_permissionRepository.Flush(); if (group is RoleUserGroup roleUserGroup) { var client = m_communicationProvider.GetAuthRoleApiClient(); client.DeleteRoleAsync(roleUserGroup.ExternalId).GetAwaiter().GetResult(); } else { throw new InvalidOperationException($"Only RoleUserGroup can be updated by this method, argument type was: {group.GetType()}"); } }
public RoleContract GetDefaultUnregisteredRole() { var client = m_communicationProvider.GetAuthRoleApiClient(); return(client.GetRoleByName(Unregistered).GetAwaiter().GetResult()); }