gpt4 book ai didi

asp.net-mvc-3 - 具有角色的 AuthorizeAttribute 但不对角色值进行硬编码

转载 作者:行者123 更新时间:2023-12-03 01:06:09 24 4
gpt4 key购买 nike

是否可以添加角色但不硬编码值,例如:

[Authorize(Roles="members, admin")]

我想从数据库或配置文件中检索这些角色,如果我需要为 Controller 操作添加/删除角色,则无需重建应用程序。

我知道用枚举可以做到...... http://www.vivienchevallier.com/Articles/create-a-custom-authorizeattribute-that-accepts-parameters-of-type-enum但即使这样仍然不够灵活以满足我的需求;尽管它更干净,但它仍然有点硬编码。

最佳答案

您可以创建自定义授权属性,该属性将比较用户角色和配置中的角色。

public class ConfigAuthorizationAttribute: AuthorizeAttribute
{
private readonly IActionRoleConfigService configService;
private readonly IUserRoleService roleService;

private string actionName;

public ConfigAuthorizationAttribute()
{
configService = new ActionRoleConfigService();
roleService = new UserRoleService();
}

protected override void OnAuthorization(AuthorizationContext filterContext)
{
actionName = filterContext.ActionDescription.ActionName;
base.OnAuthorization(filterContext);
}

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var availableRoles = configService.GetActionRoles(actionName); // return list of strings
var userName = httpContext.User.Identity.Name;
var userRoles = roleService.GetUserRoles(userName); // return list of strings
return availableRoles.Any(x => userRoles.Contains(x));
}
}

希望对你有帮助。

关于asp.net-mvc-3 - 具有角色的 AuthorizeAttribute 但不对角色值进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com