Ejemplo n.º 1
0
        public virtual IActionResult RolesIdPermissionsPost([FromRoute] int id, [FromBody] HetPermission item)
        {
            HetRole role = _context.HetRole.AsNoTracking()
                           .Where(x => x.RoleId == id)
                           .Include(x => x.HetRolePermission)
                           .ThenInclude(rolePerm => rolePerm.Permission)
                           .FirstOrDefault();

            // not found
            if (role == null)
            {
                return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
            }

            List <HetPermission> allPermissions          = _context.HetPermission.ToList();
            List <string>        existingPermissionCodes = role.HetRolePermission.Select(x => x.Permission.Code).ToList();

            if (!existingPermissionCodes.Contains(item.Code))
            {
                HetPermission permToAdd = allPermissions.FirstOrDefault(x => x.Code == item.Code);

                // invalid permission
                if (permToAdd == null)
                {
                    throw new ArgumentException(string.Format("Invalid Permission Code {0}", item.Code));
                }

                // add permission
                HetRolePermission rolePermission = new HetRolePermission
                {
                    Permission = permToAdd,
                    Role       = role
                };

                _context.HetRolePermission.Add(rolePermission);
            }

            _context.SaveChanges();

            // get updated permissions
            role = _context.HetRole.AsNoTracking()
                   .Where(x => x.RoleId == id)
                   .Include(x => x.HetRolePermission)
                   .ThenInclude(rp => rp.Permission)
                   .First();

            // return role permissions
            return(new ObjectResult(new HetsResponse(role.HetRolePermission.ToList())));
        }
Ejemplo n.º 2
0
        public virtual IActionResult RolesIdPermissionsPut([FromRoute] int id, [FromBody] HetPermission[] items)
        {
            HetRole role = _context.HetRole.AsNoTracking()
                           .Where(x => x.RoleId == id)
                           .Include(x => x.HetRolePermission)
                           .ThenInclude(rolePerm => rolePerm.Permission)
                           .FirstOrDefault();

            // not found
            if (role == null)
            {
                return(new ObjectResult(new HetsResponse("HETS-01", ErrorViewModel.GetDescription("HETS-01", _configuration))));
            }

            // get permissions
            List <HetPermission> allPermissions = _context.HetPermission.AsNoTracking().ToList();

            List <int> permissionIds         = items.Select(x => x.PermissionId).ToList();
            List <int> existingPermissionIds = role.HetRolePermission.Select(x => x.Permission.PermissionId).ToList();
            List <int> permissionIdsToAdd    = permissionIds.Where(x => !existingPermissionIds.Contains(x)).ToList();

            // permissions to add
            foreach (int permissionId in permissionIdsToAdd)
            {
                HetPermission permToAdd = allPermissions
                                          .FirstOrDefault(x => x.PermissionId == permissionId);

                // invalid permission
                if (permToAdd == null)
                {
                    throw new ArgumentException("Invalid Permission Code");
                }

                // add permission
                HetRolePermission rolePermission = new HetRolePermission
                {
                    PermissionId = permToAdd.PermissionId,
                    RoleId       = role.RoleId
                };

                _context.HetRolePermission.Add(rolePermission);
            }

            // permissions to remove
            List <HetRolePermission> permissionsToRemove = role.HetRolePermission
                                                           .Where(x => x.Permission != null &&
                                                                  !permissionIds.Contains(x.Permission.PermissionId)).ToList();

            foreach (HetRolePermission perm in permissionsToRemove)
            {
                _context.HetRolePermission.Remove(perm);
            }

            _context.SaveChanges();

            // get updated permissions
            role = _context.HetRole.AsNoTracking()
                   .Where(x => x.RoleId == id)
                   .Include(x => x.HetRolePermission)
                   .ThenInclude(rp => rp.Permission)
                   .First();

            // return role permissions
            return(new ObjectResult(new HetsResponse(role.HetRolePermission.ToList())));
        }