コード例 #1
0
        public IActionResult UpdateDepartment(DepartmentResource departmentResource)
        {
            Department department = mapper.Map <Department>(departmentResource);
            var        response   = this.departmentService.UpdateDepartment(department);

            if (response.Success)
            {
                return(NoContent());
            }
            return(BadRequest(response.ErrorMessageCode));
        }
コード例 #2
0
 public IActionResult AddDepartment(DepartmentResource departmentResource)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest());
     }
     else
     {
         var resp = this.departmentService.FindByDepartmentName(departmentResource.DepartmentName);
         if (resp.Success)
         {
             Department department = mapper.Map <DepartmentResource, Department>(departmentResource);
             var        response   = this.departmentService.Add(department);
             if (response.Success)
             {
                 //DepartmentModel model = mapper.Map<Department, DepartmentModel>(response.Extra);
                 return(NoContent());
             }
             return(BadRequest(response.ErrorMessageCode));
         }
         return(BadRequest(resp.ErrorMessageCode));
     }
 }
コード例 #3
0
        public async Task <Response <DepartmentDTO> > AddResource(long departmentId, long resourceId)
        {
            var usr = await _giraf.LoadUserWithResources(HttpContext.User);

            //Fetch the department and check that it exists no need to load ressources already on user
            var department = await _giraf._context.Departments.Where(d => d.Key == departmentId)
                             .Include(d => d.Members)
                             .FirstOrDefaultAsync();

            if (department == null)
            {
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.DepartmentNotFound));
            }


            //Fetch the resource with the given id, check that it exists and that the user owns it.
            var resource = await _giraf._context.Pictograms.Where(f => f.Id == resourceId).FirstOrDefaultAsync();

            if (resource == null)
            {
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.ResourceNotFound));
            }

            var resourceOwned = await _giraf.CheckPrivateOwnership(resource, usr);

            if (!resourceOwned)
            {
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.NotAuthorized));
            }

            //Check if the department already owns the resource
            var alreadyOwned = await _giraf._context.DepartmentResources
                               .Where(depres => depres.OtherKey == departmentId &&
                                      depres.PictogramKey == resourceId)
                               .AnyAsync();

            if (alreadyOwned)
            {
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.DepartmentAlreadyOwnsResource));
            }

            //Remove resource from user
            var usrResource = await _giraf._context.UserResources
                              .Where(ur => ur.PictogramKey == resource.Id && ur.OtherKey == usr.Id)
                              .FirstOrDefaultAsync();

            if (usrResource == null)
            {
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.ResourceNotFound));
            }

            usr.Resources.Remove(usrResource);
            await _giraf._context.SaveChangesAsync();

            //Change resource AccessLevel to Protected from Private
            resource.AccessLevel = AccessLevel.PROTECTED;

            //Create a relationship between the department and the resource.
            var dr = new DepartmentResource(usr.Department, resource);
            await _giraf._context.DepartmentResources.AddAsync(dr);

            await _giraf._context.SaveChangesAsync();

            //Return Ok and the department - the resource is now visible in deparment.Resources
            var members = DepartmentDTO.FindMembers(department.Members, _roleManager, _giraf);

            return(new Response <DepartmentDTO>(new DepartmentDTO(usr.Department, members)));
        }
コード例 #4
0
        public async Task <Response <DepartmentDTO> > Post([FromBody] DepartmentDTO depDTO)
        {
            try
            {
                if (depDTO?.Name == null)
                {
                    return(new ErrorResponse <DepartmentDTO>(ErrorCode.MissingProperties,
                                                             "Deparment name has to be specified!"));
                }

                var authenticatedUser = await _giraf.LoadBasicUserDataAsync(HttpContext.User);

                if (authenticatedUser == null)
                {
                    return(new ErrorResponse <DepartmentDTO>(ErrorCode.UserNotFound));
                }

                var userRole = await _roleManager.findUserRole(_giraf._userManager, authenticatedUser);

                if (userRole != GirafRoles.SuperUser)
                {
                    return(new ErrorResponse <DepartmentDTO>(ErrorCode.NotAuthorized));
                }

                //Add the department to the database.
                Department department = new Department(depDTO);

                //Add all members specified by either id or username in the DTO
                if (depDTO.Members != null)
                {
                    foreach (var mem in depDTO.Members)
                    {
                        var usr = await _giraf._context.Users
                                  .Where(u => u.UserName == mem.UserName || u.Id == mem.UserId)
                                  .FirstOrDefaultAsync();

                        if (usr == null)
                        {
                            return(new ErrorResponse <DepartmentDTO>(ErrorCode.InvalidProperties,
                                                                     "The member list contained an invalid id: " + mem));
                        }
                        department.Members.Add(usr);
                        usr.Department = department;
                    }
                }

                //Add all the resources with the given ids
                if (depDTO.Resources != null)
                {
                    foreach (var reso in depDTO.Resources)
                    {
                        var res = await _giraf._context.Pictograms
                                  .Where(p => p.Id == reso)
                                  .FirstOrDefaultAsync();

                        if (res == null)
                        {
                            return(new ErrorResponse <DepartmentDTO>(ErrorCode.InvalidProperties,
                                                                     "The list of resources contained an invalid resource id: " + reso));
                        }
                        var dr = new DepartmentResource(department, res);
                        await _giraf._context.DepartmentResources.AddAsync(dr);
                    }
                }

                await _giraf._context.Departments.AddAsync(department);

                //Create a new user with the supplied information

                var departmentUser = new GirafUser(depDTO.Name, department)
                {
                    IsDepartment = true
                };

                //department.Members.Add(user);

                var identityUser = await _giraf._userManager.CreateAsync(departmentUser, "0000");

                if (identityUser.Succeeded == false)
                {
                    return(new ErrorResponse <DepartmentDTO>(ErrorCode.CouldNotCreateDepartmentUser, string.Join("\n", identityUser.Errors)));
                }

                await _giraf._userManager.AddToRoleAsync(departmentUser, GirafRole.Department);

                //Save the changes and return the entity
                await _giraf._context.SaveChangesAsync();

                var members = DepartmentDTO.FindMembers(department.Members, _roleManager, _giraf);
                return(new Response <DepartmentDTO>(new DepartmentDTO(department, members)));
            }
            catch (System.Exception e)
            {
                var errorDescription = $"Exception in Post: {e.Message}, {e.InnerException}";
                _giraf._logger.LogError(errorDescription);
                return(new ErrorResponse <DepartmentDTO>(ErrorCode.Error, errorDescription));
            }
        }