1 Star 0 Fork 2

升鲜宝供应链管理系统/NetEngine

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
AuthorizeController.cs 3.00 KB
一键复制 编辑 原始数据 按行查看 历史
ZhangXiaoDong 提交于 2022-07-21 09:57 +08:00 . 优化过滤器参数名称
using AdminAPI.Filters;
using AdminAPI.Libraries;
using AdminAPI.Services;
using AdminShared.Models;
using AdminShared.Models.Authorize;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Repository.Database;
using System.Text;
namespace AdminAPI.Controllers
{
/// <summary>
/// 系统访问授权模块
/// </summary>
[Route("[controller]")]
[ApiController]
public class AuthorizeController : ControllerBase
{
private readonly DatabaseContext db;
private readonly AuthorizeService authorizeService;
private readonly long userId;
public AuthorizeController(DatabaseContext db, AuthorizeService authorizeService, IHttpContextAccessor httpContextAccessor)
{
this.db = db;
this.authorizeService = authorizeService;
var userIdStr = httpContextAccessor.HttpContext?.GetClaimByAuthorization("userId");
if (userIdStr != null)
{
userId = long.Parse(userIdStr);
}
}
/// <summary>
/// 获取Token认证信息
/// </summary>
/// <param name="login">登录信息集合</param>
/// <returns></returns>
[HttpPost("GetToken")]
public string? GetToken(DtoLogin login)
{
var userList = db.TUser.Where(t => t.IsDelete == false && (t.Name == login.Name || t.Phone == login.Name || t.Email == login.Name)).Select(t => new { t.Id, t.PassWord }).ToList();
var user = userList.Where(t => t.PassWord == Convert.ToBase64String(KeyDerivation.Pbkdf2(login.PassWord, Encoding.UTF8.GetBytes(t.Id.ToString()), KeyDerivationPrf.HMACSHA256, 1000, 32))).FirstOrDefault();
if (user != null)
{
return authorizeService.GetTokenByUserId(user.Id);
}
else
{
HttpContext.Response.StatusCode = 400;
HttpContext.Items.Add("errMsg", "用户名或密码错误");
return default;
}
}
/// <summary>
/// 获取授权功能列表
/// </summary>
/// <param name="sign">模块标记</param>
/// <returns></returns>
[SignVerifyFilter]
[Authorize]
[CacheDataFilter(TTL = 60, IsUseToken = true)]
[HttpGet("GetFunctionList")]
public List<DtoKeyValue> GetFunctionList(string sign)
{
var roleIds = db.TUserRole.AsNoTracking().Where(t => t.IsDelete == false && t.UserId == userId).Select(t => t.RoleId).ToList();
var kvList = db.TFunctionAuthorize.Where(t => t.IsDelete == false && (roleIds.Contains(t.RoleId!.Value) || t.UserId == userId) && t.Function.Parent!.Sign == sign).Select(t => new DtoKeyValue
{
Key = t.Function.Sign,
Value = t.Function.Name
}).ToList();
return kvList;
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/sunplay_admin/NetEngine.git
git@gitee.com:sunplay_admin/NetEngine.git
sunplay_admin
NetEngine
NetEngine
master

搜索帮助