using Infrastructure.Data; using Infrastructure.Web; using Application.Domain.Entities; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using Microsoft.AspNetCore.Http; namespace Platform { public class UserService : IUserService { private readonly IRepository _appModuleRepo; private readonly IRepository _organUserRepo; private readonly IHttpContextAccessor _httpContextAccesstor; public UserService(IRepository appModuleRepo,IRepository organUserRepo, IHttpContextAccessor httpContextAccesstor) { this._appModuleRepo = appModuleRepo; this._organUserRepo = organUserRepo; this._httpContextAccesstor = httpContextAccesstor; } public List GetOrgans(string userName) { var list = this._organUserRepo.ReadOnlyTable().Where(o => o.User.UserName == userName) .Select(o => o.OrganId.ToString()) .ToList(); return list; } public List GetRoles(string userName, string organId) { List list = null; if (!string.IsNullOrEmpty(organId)) { if(Guid.TryParse(organId,out Guid currentOrganId)) { var organUser = this._organUserRepo.ReadOnlyTable() .Where(o => o.User.UserName == userName) .Where(o => o.OrganId == currentOrganId) .Include(o => o.User) .Include(o => o.UserRoles).ThenInclude(o => o.OrganRole).ThenInclude(o => o.RolePermissions).ThenInclude(o => o.Permission) .FirstOrDefault(); if (organUser != null) { list = organUser.UserRoles .Select(o => o.OrganRole) .SelectMany(o => o.RolePermissions) .Select(o => o.Permission.Number) .Distinct() .ToList() .Select(o => new Claim(ClaimTypes.Role, o)) .ToList(); list.Add(new Claim(ClaimTypes.GivenName, organUser.User.NickName)); if (!string.IsNullOrEmpty(organUser.User.Avatar)) { list.Add(new Claim("Avatar", organUser.User.Avatar)); } } } } return list; } } }