gpt4 book ai didi

c# - 创建一个即使未列出也始终被授权的角色

转载 作者:行者123 更新时间:2023-11-30 12:13:35 25 4
gpt4 key购买 nike

在 MVC3 中,有没有一种方法可以使角色(SuperAdmin)始终获得授权,即使没有在角色列表中明确列出?

例如这个标记...

[Authorize(Roles="Accounting")]

即使我不担任会计角色,作为 super 管理员,是否有办法获得此操作的授权?

最佳答案

我强烈推荐阅读 Securing your ASP.NET MVC 3 Application .

首先,创建您的AnonymousAttribute:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, 
AllowMultiple = false,
Inherited = true)]
public sealed class AllowAnonymousAttribute : Attribute
{
}

其次,创建您的 GlobalAuthorize 属性:

public sealed class GlobalAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
bool bypassAuthorization =
filterContext.ActionDescriptor
.IsDefined(typeof(AllowAnonymousAttribute),
true)
|| filterContext.ActionDescriptor
.ControllerDescriptor
.IsDefined(typeof(AllowAnonymousAttribute),
true)
|| (filterContext.RequestContext
.HttpContext
.User != null
&& filterContext.RequestContext
.HttpContext
.User
.IsInRole("SuperAdmin"));

if (!bypassAuthorization)
{
base.OnAuthorization(filterContext);
}
}
}

第三,在您的全局过滤器(global.asax)中注册 GlobalAuthorize:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new GlobalAuthorize());
}

现在所有 Controller 都要求用户登录才能访问。可以使用 AllowAnonymous 属性允许 Controller 或 Controller 方法进行匿名访问。此外,具有 SuperAdmin 角色的用户允许使用所有方法。

关于c# - 创建一个即使未列出也始终被授权的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441534/

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