// Admin.NET 项目的版æƒã€å•†æ ‡ã€ä¸“利和其他相关æƒåˆ©å‡å—ç›¸åº”æ³•å¾‹æ³•è§„çš„ä¿æŠ¤ã€‚ä½¿ç”¨æœ¬é¡¹ç›®åº”éµå®ˆç›¸å…³æ³•律法规和许å¯è¯çš„è¦æ±‚。
//
// 本项目主è¦éµå¾ª MIT 许å¯è¯å’Œ Apache 许å¯è¯ï¼ˆç‰ˆæœ¬ 2.0)进行分å‘和使用。许å¯è¯ä½äºŽæºä»£ç æ ‘æ ¹ç›®å½•ä¸çš„ LICENSE-MIT å’Œ LICENSE-APACHE 文件。
//
// ä¸å¾—利用本项目从事å±å®³å›½å®¶å®‰å…¨ã€æ‰°ä¹±ç¤¾ä¼šç§©åºã€ä¾µçŠ¯ä»–äººåˆæ³•æƒç›Šç‰æ³•å¾‹æ³•è§„ç¦æ¢çš„æ´»åЍï¼ä»»ä½•基于本项目二次开å‘è€Œäº§ç”Ÿçš„ä¸€åˆ‡æ³•å¾‹çº çº·å’Œè´£ä»»ï¼Œæˆ‘ä»¬ä¸æ‰¿æ‹…任何责任ï¼
using System.Security.Claims;
namespace Admin.NET.Core.Service;
/// <summary>
/// æƒé™éªŒè¯
/// </summary>
public class IdentityService : ITransient
{
private readonly IHttpContextAccessor _context;
private readonly List<APIJSON_Role> _roles;
public IdentityService(IHttpContextAccessor context, IOptions<APIJSONOptions> roles)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
_roles = roles.Value.Roles;
}
/// <summary>
/// 获å–当å‰ç”¨æˆ·Id
/// </summary>
/// <returns></returns>
public string GetUserIdentity()
{
return _context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
}
/// <summary>
/// 获å–当å‰ç”¨æˆ·æƒé™åç§°
/// </summary>
/// <returns></returns>
public string GetUserRoleName()
{
return _context.HttpContext.User.FindFirstValue(ClaimTypes.Role);
}
/// <summary>
/// 获å–当å‰ç”¨æˆ·æƒé™
/// </summary>
/// <returns></returns>
public APIJSON_Role GetRole()
{
var role = string.IsNullOrEmpty(GetUserRoleName())
? _roles.FirstOrDefault()
: _roles.FirstOrDefault(it => it.RoleName.Equals(GetUserRoleName(), StringComparison.CurrentCultureIgnoreCase));
return role;
}
/// <summary>
/// 获å–当å‰è¡¨çš„坿Ÿ¥è¯¢å—段
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public (bool, string) GetSelectRole(string table)
{
var role = GetRole();
if (role == null || role.Select == null || role.Select.Table == null)
return (false, $"appsettings.jsonæƒé™é…ç½®ä¸æ£ç¡®ï¼");
var tablerole = role.Select.Table.FirstOrDefault(it => it == "*" || it.Equals(table, StringComparison.CurrentCultureIgnoreCase));
if (string.IsNullOrEmpty(tablerole))
return (false, $"表å{table}没æƒé™æŸ¥è¯¢ï¼");
var index = Array.IndexOf(role.Select.Table, tablerole);
var selectrole = role.Select.Column[index];
return (true, selectrole);
}
/// <summary>
/// 当å‰åˆ—是å¦åœ¨è§’色里é¢
/// </summary>
/// <param name="col"></param>
/// <param name="selectrole"></param>
/// <returns></returns>
public bool ColIsRole(string col, string[] selectrole)
{
if (selectrole.Contains("*")) return true;
if (col.Contains('(') && col.Contains(')'))
{
var reg = new Regex(@"\(([^)]*)\)");
var match = reg.Match(col);
return selectrole.Contains(match.Result("$1"), StringComparer.CurrentCultureIgnoreCase);
}
else
{
return selectrole.Contains(col, StringComparer.CurrentCultureIgnoreCase);
}
}
}