Example #1
0
        public async Task <IActionResult> GetPhotoMeta(Guid id)
        {
            var photoEntity = await photosRepository.GetPhotoMetaAsync(id);

            if (photoEntity == null)
            {
                return(NotFound());
            }

            var photo = mapper.Map <PhotoDto>(photoEntity);

            return(Ok(photo));
        }
Example #2
0
        public async Task <IActionResult> GetPhoto(Guid id)
        {
            var photoEntity = await photosRepository.GetPhotoMetaAsync(id);

            if (photoEntity == null)
            {
                return(NotFound());
            }

            var photo = mapper.Map <Photo>(photoEntity);

            var model = new GetPhotoModel(photo);

            return(View(model));
        }
        protected override async Task HandleRequirementAsync(
            AuthorizationHandlerContext context, MustOwnPhotoRequirement requirement)
        {
            var userId = context.User.FindFirstValue(ClaimTypes.NameIdentifier);
            // NOTE: IHttpContextAccessor позволяет получать HttpContext там, где это не получается сделать более явно.
            var httpContext = httpContextAccessor.HttpContext;
            // NOTE: RouteData содержит информацию о пути и параметрах запроса.
            // Ее сформировал UseRouting и к моменту авторизации уже отработал.
            var routeData = httpContext?.GetRouteData();

            var photoIdString = routeData?.Values["id"].ToString();

            if (!Guid.TryParse(photoIdString, out var photoId))
            {
                context.Fail();
                return;
            }
            var photo = await photosRepository.GetPhotoMetaAsync(photoId);

            if (photo != null && photo.OwnerId == userId)
            {
                context.Succeed(requirement);
                return;
            }

            context.Fail();
        }