我正在尝试在ASP.NET Core中创建自定义授权属性.在以前的版本中,可以覆盖bool AuthorizeCore(HttpContextBase httpContext).但这不再存在于AuthorizeAttribute.
制作自定义AuthorizeAttribute的当前方法是什么?
我想要完成的任务:我在Header Authorization中收到一个会话ID.从该ID我将知道特定动作是否有效.
我正在尝试使用aspnet核心实现基于权限的访问控制.为了动态管理用户角色和权限(create_product,delete_product等),它们存储在数据库中.数据模型类似于http://i.stack.imgur.com/CHMPE.png
在aspnet核心之前(在MVC 5中)我使用AuthorizeAttribute下面的自定义来处理这个问题:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
private readonly string _permissionName { get; set; }
[Inject]
public IAccessControlService _accessControlService { get; set; }
public CustomAuthorizeAttribute(string permissionName = "")
{
_permissionName = permissionName;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
var user = _accessControlService.GetUser();
if (PermissionName != "" && !user.HasPermission(_permissionName))
{
// set error result
filterContext.HttpContext.Response.StatusCode = 403;
return;
}
filterContext.HttpContext.Items["CUSTOM_USER"] = user;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在下面的动作方法中使用它:
[HttpGet]
[CustomAuthorize(PermissionEnum.PERSON_LIST)]
public ActionResult Index(PersonListQuery query){ }
Run Code Online (Sandbox Code Playgroud)
另外,我在视图中使用HttpContext.Items ["CUSTOM_USER"]来显示或隐藏html部分: …
这不是一个重复的问题,或者说其他解决方案中给出的解决方案没有奏效.
让我们说有一个cntroller
[Authorize(Roles=//set dynamically)]
public IActionResult DashBoard(LoginModel model)
{
}
Run Code Online (Sandbox Code Playgroud)
我在以下问题中尝试了解决方案
3)动态添加角色以授权控制器的属性(错误:句柄方法 - 找不到合适的方法来覆盖)
所有这些解决方案都不起作用,因为接口中覆盖的方法不存在(例如,authorizeAttribute不包含AuthorizeCore的定义),或者在某些情况下,IServiceCollection服务不包含特定方法
asp.net authorize-attribute asp.net-identity role-based-access-control asp.net-core