public async Task <FileStorage> GetByChildId(int childId, int userId, int clientId)
        {
            var user = await _userManager.FindByIdAsync(userId.ToString());

            var roleNames = await _userManager.GetRolesAsync(user);

            var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync();

            var childFileStorage = await Context.Set <FileStorage>()
                                   .FirstOrDefaultAsync(x => x.Id == childId &&
                                                        x.IsActive &&
                                                        ((!x.ClientId.HasValue && !x.OwnerId.HasValue && roles.Any(y => y.RoleType == RoleType.SuperAdmin)) ||
                                                         (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId && roles.Any(y => y.RoleType == RoleType.ClientAdmin)) ||
                                                         (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId) ||
                                                         x.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue)));

            var parentFileStorage = childFileStorage.ParentFileStorage;

            if (parentFileStorage != null && parentFileStorage.IsActive &&
                ((parentFileStorage.Owner == null && parentFileStorage.Client == null && roles.Any(y => y.RoleType == RoleType.SuperAdmin)) ||
                 (parentFileStorage.Owner == null && parentFileStorage.Client != null && roles.Any(y => y.RoleType == RoleType.ClientAdmin) && parentFileStorage.ClientId == clientId) ||
                 (parentFileStorage.Owner != null && parentFileStorage.Client == null && (roles.Any(y => y.RoleType == RoleType.DepartmentHead) ||
                                                                                          roles.Any(y => y.RoleType == RoleType.Employee) || parentFileStorage.OwnerId == userId)) ||
                 parentFileStorage.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue && y.Type == PermissionType.ReadAndWrite)))
            {
                return(parentFileStorage);
            }

            return(null);
        }
예제 #2
0
        public async Task <(int?OwnerId, int?ClientId)> GetOwners(FileStorage parentFileStorage, int userId, int userClientId)
        {
            var user = await _userManager.FindByIdAsync(userId.ToString());

            var roleNames = await _userManager.GetRolesAsync(user);

            var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync();

            int?ownerId  = null;
            int?clientId = null;

            if (parentFileStorage.Id == 1)
            {
                foreach (var role in roles)
                {
                    if (role.RoleType == RoleType.SuperAdmin)
                    {
                        ownerId  = null;
                        clientId = null;
                    }
                    else if (role.RoleType == RoleType.ClientAdmin)
                    {
                        ownerId  = null;
                        clientId = userClientId;
                    }
                    else if (role.RoleType == RoleType.DepartmentHead || role.RoleType == RoleType.Employee)
                    {
                        ownerId  = userId;
                        clientId = null;
                    }
                    else
                    {
                        ownerId  = userId;
                        clientId = null;
                    }
                }
            }
            else
            {
                ownerId  = parentFileStorage.OwnerId;
                clientId = parentFileStorage.ClientId;
            }

            return(ownerId, clientId);
        }
        public async Task <FileStorage> GetById(int id, int userId, int clientId)
        {
            if (id == 1)
            {
                return(await Context.Set <FileStorage>()
                       .FirstOrDefaultAsync(x => x.Id == 1 && x.IsActive && ((!x.ClientId.HasValue && !x.OwnerId.HasValue) ||
                                                                             (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId) ||
                                                                             (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId))));
            }

            var user = await _userManager.FindByIdAsync(userId.ToString());

            var roleNames = await _userManager.GetRolesAsync(user);

            var roles = await _roleManager.Roles.Where(x => roleNames.Contains(x.Name)).ToListAsync();

            return(await Context.Set <FileStorage>()
                   .FirstOrDefaultAsync(x => x.Id == id && x.IsActive && ((!x.ClientId.HasValue && !x.OwnerId.HasValue && (roles.Any(y => y.RoleType == RoleType.SuperAdmin)) || x.ParentFileStorageId == 1) ||
                                                                          (x.ClientId.HasValue && !x.OwnerId.HasValue && x.ClientId.Value == clientId && (roles.Any(y => y.RoleType == RoleType.ClientAdmin)) || x.ParentFileStorageId == 1) ||
                                                                          (!x.ClientId.HasValue && x.OwnerId.HasValue && x.OwnerId.Value == userId) ||
                                                                          x.Permissions.Any(y => y.RecipientId == userId && !y.EndDate.HasValue))));
        }