C
using Microsoft.AspNetCore.Mvc;
namespace demo1.Filter.Attribute
{
public class PermissionAttribute : TypeFilterAttribute
{
public PermissionAttribute(string permission) : base(typeof(PermissionFilter))
{
Arguments = new object[] { permission };
}
}
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace demo1.Filter
{
public class PermissionFilter : IAsyncAuthorizationFilter
{
private readonly string _permission;
public PermissionFilter(string permission)
{
_permission = permission;
}
public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
{
// 1. 获取当前用户
var user = context.HttpContext.User;
//context.Result = new Microsoft.AspNetCore.Mvc.ForbidResult( );
context.Result = new ObjectResult(new { error = $"Missing permission: {_permission}" })
{
StatusCode = StatusCodes.Status403Forbidden
};
// 2. 判断用户是否具有特定权限(例如 "Admin" 角色)
//if (!user.IsInRole("Admin"))
//{
// // 3. 如果没有权限,返回 403 Forbidden
// context.Result = new Microsoft.AspNetCore.Mvc.ForbidResult();
// return;
//}
// 如果有权限,不做任何操作,继续执行
}
}
}C
实例:
[Permission("方法的过滤器")]
[HttpGet]
public async Task<IActionResult> Showtoken()
{
long userid = User.GetUserId();
if (userid == 0)
{
return Unauthorized("无法获取用户信息");
}
Users users =await DbContext.Set<Users>().FindAsync(userid);
if(users == null)
{
return NotFound("未找到");
}
return Ok(users);
}