コード例 #1
0
        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();
        }
コード例 #2
0
        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()}");
            }
        }
コード例 #3
0
ファイル: CreateRoleWork.cs プロジェクト: RIDICS/ITJakub
        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);
        }
コード例 #4
0
ファイル: RoleManager.cs プロジェクト: RIDICS/ITJakub
        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,
                });
            }
        }
コード例 #5
0
        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();
            }
        }
コード例 #6
0
ファイル: DeleteRoleWork.cs プロジェクト: RIDICS/ITJakub
        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()}");
            }
        }
コード例 #7
0
        public RoleContract GetDefaultUnregisteredRole()
        {
            var client = m_communicationProvider.GetAuthRoleApiClient();

            return(client.GetRoleByName(Unregistered).GetAwaiter().GetResult());
        }