示例#1
0
        public virtual async Task CreateAsync(OrganizationUnit organizationUnit)
        {
            organizationUnit.Code = await GetNextChildCodeAsync(organizationUnit.ParentId);
            await ValidateOrganizationUnitAsync(organizationUnit);

            await OrganizationUnitRepository.InsertAsync(organizationUnit);
        }
示例#2
0
        public virtual async Task MoveAsync(long id, long?parentId)
        {
            using (var uow = UnitOfWorkManager.Begin())
            {
                var organizationUnit = await OrganizationUnitRepository.GetAsync(id);

                if (organizationUnit.ParentId == parentId)
                {
                    await uow.CompleteAsync();

                    return;
                }

                //Should find children before Code change
                var children = await FindChildrenAsync(id, true);

                //Store old code of OU
                var oldCode = organizationUnit.Code;

                //Move OU
                organizationUnit.Code = await GetNextChildCodeAsync(parentId);

                organizationUnit.ParentId = parentId;

                await ValidateOrganizationUnitAsync(organizationUnit);

                //Update Children Codes
                foreach (var child in children)
                {
                    child.Code = OrganizationUnit.AppendCode(organizationUnit.Code, OrganizationUnit.GetRelativeCode(child.Code, oldCode));
                }

                await uow.CompleteAsync();
            }
        }
示例#3
0
 public virtual async Task AddToOrganizationUnitAsync(Guid userId, Guid ouId)
 {
     await AddToOrganizationUnitAsync(
         await UserRepository.GetAsync(userId, cancellationToken: CancellationToken),
         await OrganizationUnitRepository.GetAsync(ouId, cancellationToken: CancellationToken)
         );
 }
示例#4
0
        public virtual void Move(long id, long?parentId)
        {
            var organizationUnit = OrganizationUnitRepository.Get(id);

            if (organizationUnit.ParentId == parentId)
            {
                return;
            }

            //Should find children before Code change
            var children = FindChildren(id, true);

            //Store old code of OU
            var oldCode = organizationUnit.Code;

            //Move OU
            organizationUnit.Code     = GetNextChildCode(parentId);
            organizationUnit.ParentId = parentId;

            ValidateOrganizationUnit(organizationUnit);

            //Update Children Codes
            foreach (var child in children)
            {
                child.Code = OrganizationUnit.AppendCode(organizationUnit.Code, OrganizationUnit.GetRelativeCode(child.Code, oldCode));
            }
        }
示例#5
0
 public UnitOfWork(ApplicationDbContext context)
 {
     _context          = context;
     OrganizationUnits = new OrganizationUnitRepository(context);
     DocumentTypes     = new DocumentTypeRepository(context);
     Documents         = new DocumentRepository(context);
 }
示例#6
0
        public virtual async Task <ListResultDto <OrganizationUnitDto> > GetAllListAsync()
        {
            var origanizationUnits = await OrganizationUnitRepository.GetListAsync(false);

            return(new ListResultDto <OrganizationUnitDto>(
                       ObjectMapper.Map <List <OrganizationUnit>, List <OrganizationUnitDto> >(origanizationUnits)));
        }
        public virtual async Task <ListResultDto <IdentityRoleDto> > GetMemberAssignableRolesAsync(Guid id, Guid userId)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, false);

            var availableRoles = await GetAvailableRolesAsync(ou.ParentId);

            var userRoles = ObjectMapper.Map <List <IdentityRole>, List <IdentityRoleDto> >(
                await UserRepository.GetRolesAsync(userId, false)
                );

            var assignableRoles = new List <IdentityRoleDto>();

            foreach (var ur in userRoles)
            {
                ur.IsStatic = true;
                assignableRoles.Add(ur);
            }
            foreach (var avr in availableRoles)
            {
                if (!assignableRoles.Any(asr => asr.Id == avr.Id))
                {
                    assignableRoles.Add(avr);
                }
            }

            return(new ListResultDto <IdentityRoleDto>(assignableRoles));
        }
        public virtual async Task MoveAsync(Guid id, OrganizationUnitMoveInput input)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, false);

            await AuthorizationService.CheckAsync(ou, CommonOperations.Update);

            if (input.ParentId != ou.ParentId)
            {
                if (input.ParentId.HasValue)
                {
                    var parentOrganizationUnit = await OrganizationUnitRepository.GetAsync(input.ParentId.Value, false);

                    await AuthorizationService.CheckAsync(parentOrganizationUnit, CommonOperations.Create);
                }
                else
                {
                    await AuthorizationService.CheckAsync(null, CommonOperations.Create);
                }
            }

            await OrganizationUnitManager.MoveAsync(ou.Id, input.ParentId);

            var children = await OrganizationUnitRepository.GetChildrenAsync(input.ParentId, false);

            await UpdatePositionAsync(ou, children, input.BeforeOrganizationUnitId);
        }
        public virtual async Task <OrganizationUnitDto> UpdateAsync(Guid id, OrganizationUnitUpdateDto input)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, true);

            await AuthorizationService.CheckAsync(ou, CommonOperations.Update);

            ou.DisplayName      = input.DisplayName;
            ou.ConcurrencyStamp = input.ConcurrencyStamp;
            ou.SetProperty(OrganizationUnitExtraPropertyNames.IsActiveName, input.IsActive);

            foreach (var roleId in ou.Roles.Select(our => our.RoleId).Except(input.RoleIds))
            {
                ou.RemoveRole(roleId);
            }
            foreach (var roleId in input.RoleIds.Except(ou.Roles.Select(our => our.RoleId)))
            {
                ou.AddRole(roleId);
            }

            await OrganizationUnitManager.UpdateAsync(ou);

            //remove cache
            await CacheOrganizationUnits.RemoveAsync(AllOrganizationUnitsListCacheName);

            return(ObjectMapper.Map <OrganizationUnit, OrganizationUnitDto>(ou));
        }
示例#10
0
        public virtual async Task MoveAsync(Guid id, Guid?parentId)
        {
            var organizationUnit = await OrganizationUnitRepository.GetAsync(id);

            if (organizationUnit.ParentId == parentId)
            {
                return;
            }

            //Should find children before Code change
            var children = await FindChildrenAsync(id, true);

            //Store old code of OU
            var oldCode = organizationUnit.Code;

            //Move OU
            organizationUnit.Code = await GetNextChildCodeAsync(parentId);

            organizationUnit.ParentId = parentId;

            await ValidateOrganizationUnitAsync(organizationUnit);

            //Update Children Codes
            foreach (var child in children)
            {
                child.Code = OrganizationUnit.AppendCode(organizationUnit.Code, OrganizationUnit.GetRelativeCode(child.Code, oldCode));
            }
        }
        public virtual async Task <ListResultDto <OrganizationUnitDto> > GetAuthorizedAsync()
        {
            List <OrganizationUnit> list;

            if (await AuthorizationService.IsGrantedAsync(OrganizationUnitPermissions.OrganizationUnits.SuperAuthorization))
            {
                list = await OrganizationUnitRepository.GetChildrenAsync(null, includeDetails : false);
            }
            else
            {
                list = await UserRepository.GetOrganizationUnitsAsync(CurrentUser.Id.Value, false);

                list = list.Where(ou => !list.Any(y => ou.Code.StartsWith(y.Code) && y.Id != ou.Id))
                       .ToList();
            }


            var dtoList = ObjectMapper.Map <List <OrganizationUnit>, List <OrganizationUnitDto> >(list);

            foreach (var dto in dtoList)
            {
                dto.ChildrenCount = (await OrganizationUnitRepository.GetChildrenAsync(dto.Id, false)).Count;
            }

            return(new ListResultDto <OrganizationUnitDto>(
                       dtoList.OrderBy(ou => ou.Code)
                       .ToList()
                       ));
        }
示例#12
0
 public virtual async Task RemoveRoleFromOrganizationUnitAsync(Guid roleId, Guid ouId)
 {
     await RemoveRoleFromOrganizationUnitAsync(
         await IdentityRoleRepository.GetAsync(roleId),
         await OrganizationUnitRepository.GetAsync(ouId, true)
         );
 }
示例#13
0
        public virtual async Task <OrganizationUnit> GetLastChildOrNullAsync(long?parentId)
        {
            var query = OrganizationUnitRepository.GetAll()
                        .Where(ou => ou.ParentId == parentId)
                        .OrderByDescending(ou => ou.Code);

            return(await AsyncQueryableExecuter.FirstOrDefaultAsync(query));
        }
        public virtual async Task DeleteAsync(Guid id)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, false);

            await AuthorizationService.CheckAsync(ou, CommonOperations.Delete);

            await OrganizationUnitManager.DeleteAsync(ou.Id);
        }
示例#15
0
        public virtual OrganizationUnit GetLastChildOrNull(long?parentId)
        {
            var query = OrganizationUnitRepository.GetAll()
                        .Where(ou => ou.ParentId == parentId)
                        .OrderByDescending(ou => ou.Code);

            return(query.FirstOrDefault());
        }
        public virtual async Task <ListResultDto <IdentityRoleDto> > GetRolesAsync(Guid id)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, false);

            return(new ListResultDto <IdentityRoleDto>(
                       ObjectMapper.Map <List <IdentityRole>, List <IdentityRoleDto> >(
                           await OrganizationUnitRepository.GetRolesAsync(ou)
                           )));
        }
示例#17
0
        public virtual async Task <List <OrganizationUnit> > GetOrganizationUnitsAsync(IdentityUser user)
        {
            await IdentityUserRepository.EnsureCollectionLoadedAsync(user, u => u.OrganizationUnits, CancellationTokenProvider.Token);

            return(await OrganizationUnitRepository.GetListAsync(
                       user.OrganizationUnits.Select(t => t.OrganizationUnitId),
                       cancellationToken : CancellationToken
                       ));
        }
        //[Authorize(OrganizationUnitPermissions.OrganizationUnitLookup.Default)]
        public virtual async Task <OrganizationUnitDto> GetAsync(Guid id)
        {
            var dto = ObjectMapper.Map <OrganizationUnit, OrganizationUnitDto>(
                await OrganizationUnitRepository.GetAsync(id, false)
                );

            dto.ChildrenCount = (await OrganizationUnitRepository.GetChildrenAsync(dto.Id, false)).Count;

            return(dto);
        }
示例#19
0
        public virtual async Task <ListResultDto <IdentityUserDto> > GetUsersAsync(OrganizationUnitGetUserDto input)
        {
            var origanizationUnit = await OrganizationUnitRepository.GetAsync(input.Id);

            // TODO: 官方库没有定义分页查询API,有可能是企业付费版本,需要自行实现
            var origanizationUnitUsers = await UserRepository.GetUsersInOrganizationUnitAsync(origanizationUnit.Id);

            return(new ListResultDto <IdentityUserDto>(
                       ObjectMapper.Map <List <IdentityUser>, List <IdentityUserDto> >(origanizationUnitUsers)));
        }
示例#20
0
        public virtual async Task <PagedResultDto <OrganizationUnitDto> > GetListAsync(OrganizationUnitGetByPagedDto input)
        {
            var origanizationUnitCount = await OrganizationUnitRepository.GetCountAsync();

            var origanizationUnits = await OrganizationUnitRepository
                                     .GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, false);

            return(new PagedResultDto <OrganizationUnitDto>(origanizationUnitCount,
                                                            ObjectMapper.Map <List <OrganizationUnit>, List <OrganizationUnitDto> >(origanizationUnits)));
        }
示例#21
0
        public virtual async Task DeleteAsync(Guid id)
        {
            var origanizationUnit = await OrganizationUnitRepository.FindAsync(id);

            if (origanizationUnit == null)
            {
                return;
            }
            await OrganizationUnitManager.DeleteAsync(id);
        }
示例#22
0
        public virtual Task AddRoleToOrganizationUnitAsync(IdentityRole role, OrganizationUnit ou)
        {
            var currentRoles = ou.Roles;

            if (currentRoles.Any(r => r.OrganizationUnitId == ou.Id && r.RoleId == role.Id))
            {
                return(Task.FromResult(0));
            }
            ou.AddRole(role.Id);
            return(OrganizationUnitRepository.UpdateAsync(ou));
        }
示例#23
0
        public virtual void Create(OrganizationUnit organizationUnit)
        {
            using (var uow = UnitOfWorkManager.Begin())
            {
                organizationUnit.Code = GetNextChildCode(organizationUnit.ParentId);
                ValidateOrganizationUnit(organizationUnit);
                OrganizationUnitRepository.Insert(organizationUnit);

                uow.Complete();
            }
        }
示例#24
0
        public virtual void Delete(long id)
        {
            var children = FindChildren(id, true);

            foreach (var child in children)
            {
                OrganizationUnitRepository.Delete(child);
            }

            OrganizationUnitRepository.Delete(id);
        }
示例#25
0
        public virtual async Task DeleteAsync(long id)
        {
            var children = await FindChildrenAsync(id, true);

            foreach (var child in children)
            {
                await OrganizationUnitRepository.DeleteAsync(child);
            }

            await OrganizationUnitRepository.DeleteAsync(id);
        }
示例#26
0
    public async Task Should_Lazy_Load_OrganizationUnit_Collections()
    {
        using (var uow = GetRequiredService <IUnitOfWorkManager>().Begin())
        {
            var ou = await OrganizationUnitRepository.GetAsync(LookupNormalizer.NormalizeName("OU111"), includeDetails : false);

            ou.Roles.ShouldNotBeNull(); //?
            ou.Roles.Any().ShouldBeTrue();

            await uow.CompleteAsync();
        }
    }
        public virtual async Task RemoveRoleAsync(OrganizationUnitDtoAddOrRemoveRoleDto input)
        {
            var origanizationUnit = await OrganizationUnitRepository.GetAsync(input.Id);

            if (origanizationUnit.IsInRole(input.RoleId))
            {
                origanizationUnit.RemoveRole(input.RoleId);
                await OrganizationUnitManager.UpdateAsync(origanizationUnit);

                await CurrentUnitOfWork.SaveChangesAsync();
            }
        }
        public virtual async Task <GetOrganizationUnitForEditOutput> GetOrganizationUnitForEditAsync(Guid id)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, true);

            var output = new GetOrganizationUnitForEditOutput();

            output.OrganizationUnit = ObjectMapper.Map <OrganizationUnit, OrganizationUnitEditDto>(ou);
            output.RoleIds          = ou.Roles.Select(r => r.RoleId).ToArray();
            output.AvailableRoles   = await GetAvailableRolesAsync(ou.ParentId);

            return(output);
        }
        public virtual async Task <PagedResultDto <IdentityUserDto> > GetMembersAsync(Guid id, GetOrganizationUnitMembersInput input)
        {
            var ou = await OrganizationUnitRepository.GetAsync(id, false);

            var count = await OrganizationUnitRepository.GetMembersCountAsync(ou, input.Filter);

            var members = await OrganizationUnitRepository.GetMembersAsync(ou, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter);

            return(new PagedResultDto <IdentityUserDto>(count,
                                                        ObjectMapper.Map <List <IdentityUser>, List <IdentityUserDto> >(members)
                                                        ));
        }
示例#30
0
        public virtual async Task <PagedResultDto <IdentityRoleDto> > GetRolesAsync(OrganizationUnitGetRoleByPagedDto input)
        {
            var origanizationUnit = await OrganizationUnitRepository.GetAsync(input.Id);

            var origanizationUnitRoleCount = await OrganizationUnitRepository.GetRolesCountAsync(origanizationUnit);

            var origanizationUnitRoles = await OrganizationUnitRepository.GetRolesAsync(origanizationUnit,
                                                                                        input.Sorting, input.MaxResultCount, input.SkipCount, false);

            return(new PagedResultDto <IdentityRoleDto>(origanizationUnitRoleCount,
                                                        ObjectMapper.Map <List <IdentityRole>, List <IdentityRoleDto> >(origanizationUnitRoles)));
        }