| using System.Linq; | |
| using ContactManagementAPI.Data; | |
| using ContactManagementAPI.Models; | |
| using Microsoft.EntityFrameworkCore; | |
| namespace ContactManagementAPI.Services | |
| { | |
| public class AuthorizationService | |
| { | |
| private readonly ApplicationDbContext _context; | |
| public AuthorizationService(ApplicationDbContext context) | |
| { | |
| _context = context; | |
| } | |
| public bool HasRight(int userId, string rightKey) | |
| { | |
| var user = _context.AppUsers | |
| .AsNoTracking() | |
| .FirstOrDefault(u => u.Id == userId); | |
| if (user == null || !user.IsActive) | |
| return false; | |
| if (user.IsAdmin) | |
| return true; | |
| var userRight = _context.UserRights | |
| .AsNoTracking() | |
| .FirstOrDefault(r => r.AppUserId == userId && r.RightKey == rightKey); | |
| if (userRight != null) | |
| return userRight.IsGranted; | |
| var groupRight = _context.GroupRights | |
| .AsNoTracking() | |
| .FirstOrDefault(r => r.UserGroupId == user.GroupId && r.RightKey == rightKey); | |
| return groupRight?.IsGranted ?? false; | |
| } | |
| public bool IsAdmin(int userId) | |
| { | |
| var user = _context.AppUsers | |
| .AsNoTracking() | |
| .FirstOrDefault(u => u.Id == userId); | |
| return user?.IsAdmin == true && user.IsActive; | |
| } | |
| } | |
| } | |