75 lines
2.2 KiB
C#
75 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Identity;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
using Selector.Model;
|
|
using Selector.Model.Authorisation;
|
|
|
|
namespace Selector.Web.Controller {
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class WatchersController : BaseAuthController
|
|
{
|
|
public WatchersController(
|
|
ApplicationDbContext context,
|
|
IAuthorizationService auth,
|
|
UserManager<ApplicationUser> userManager,
|
|
ILogger<WatchersController> logger
|
|
) : base(context, auth, userManager, logger) { }
|
|
|
|
[HttpGet]
|
|
public async Task<ActionResult<IEnumerable<Watcher>>> Get()
|
|
{
|
|
var isAuthed = User.IsInRole(Constants.AdminRole);
|
|
|
|
if(isAuthed)
|
|
{
|
|
return await Context.Watcher.AsNoTracking().ToListAsync();
|
|
}
|
|
else
|
|
{
|
|
var userId = UserManager.GetUserId(User);
|
|
return await Context.Watcher.AsNoTracking().Where(w => w.UserId == userId).ToListAsync();
|
|
}
|
|
}
|
|
}
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class WatcherController : BaseAuthController
|
|
{
|
|
public WatcherController(
|
|
ApplicationDbContext context,
|
|
IAuthorizationService auth,
|
|
UserManager<ApplicationUser> userManager,
|
|
ILogger<WatcherController> logger
|
|
) : base(context, auth, userManager, logger) { }
|
|
|
|
[HttpGet("{id}")]
|
|
public async Task<ActionResult<Watcher>> Get(int id)
|
|
{
|
|
var watcher = await Context.Watcher.AsNoTracking().FirstOrDefaultAsync(w => w.Id == id);
|
|
|
|
if(watcher is null)
|
|
{
|
|
return NotFound();
|
|
}
|
|
|
|
var isAuthed = await AuthorizationService.AuthorizeAsync(User, watcher, WatcherOperations.Read);
|
|
|
|
if(!isAuthed.Succeeded)
|
|
{
|
|
return Unauthorized();
|
|
}
|
|
|
|
return watcher;
|
|
}
|
|
}
|
|
} |