File size: 1,560 Bytes
fc06b79
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using ContactManagementAPI.Data;
using ContactManagementAPI.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;

namespace ContactManagementAPI.Services
{
    public class UserContextService
    {
        private readonly ApplicationDbContext _context;
        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly AuthorizationService _authorizationService;

        public UserContextService(ApplicationDbContext context, IHttpContextAccessor httpContextAccessor, AuthorizationService authorizationService)
        {
            _context = context;
            _httpContextAccessor = httpContextAccessor;
            _authorizationService = authorizationService;
        }

        public int? UserId => _httpContextAccessor.HttpContext?.Session.GetInt32(SessionKeys.UserId);

        public bool IsAuthenticated => UserId.HasValue;

        public AppUser? CurrentUser
        {
            get
            {
                if (!UserId.HasValue)
                    return null;

                return _context.AppUsers
                    .AsNoTracking()
                    .Include(u => u.Group)
                    .FirstOrDefault(u => u.Id == UserId.Value);
            }
        }

        public bool HasRight(string rightKey)
        {
            if (!UserId.HasValue)
                return false;

            return _authorizationService.HasRight(UserId.Value, rightKey);
        }

        public bool IsAdmin => UserId.HasValue && _authorizationService.IsAdmin(UserId.Value);
    }
}