I'm working on a Asp.Net Core project right now. I need to get UserId
in a class named "CheckPermissions" which located inside a ClassLibrary named "Core", but I can't reach FindeFirestValue
method! I've read some sulotions about how to do it but I didn't get any answers.
My CheckPermissions
class is:
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Toplearn.Core.Services.Interfaces.CheckPermissions;
using Toplearn.DataLayer.Entities.Context;
namespace Toplearn.Core.Services.Services.CheckPermissions
{
public class CheckPermissionServices : ICheckPermissionServices
{
private ToplearnContext _context;
private IHttpContextAccessor _accessor;
private IAccessorServices _accessorHttpContext;
public CheckPermissionServices(ToplearnContext context, IHttpContextAccessor accessor)
{
_context = context;
_accessor = accessor;
}
public bool CheckIsAllowedUser(int userId ,int givenPermissionId)
{
int userId = (int)_accessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifire);
if (!_accessor.HttpContext.User.Identity.IsAuthenticated)
return false;
bool isExistUser = _context.Users.Any(u => u.UserId == userId);
if (!isExistUser)
return false;
bool isExistAnyRole = _context.User_Roles.Any(ur => ur.UserId == userId);
if (!isExistAnyRole)
return false;
List<int> RoleIds = _context.User_Roles.Where(ur => ur.UserId == userId)
.Select(r => r.RoleId).ToList();
bool isContainThisPermission = false;
foreach (var item in RoleIds)
{
bool isExist = _context.RolePermissions.Any(rp => rp.RoleId == item && rp.PermissionId == givenPermissionId);
if (isExist)
{
isContainThisPermission = true;
break;
}
}
if (!isContainThisPermission)
return false;
return true;
}
}
}
I've injected IHttpContextAccessor
too, but I can't reach this method!
I tried to reach this method like bellow:
int userId = (int)_accessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifire);
So Does anyone have any sulotions for it?