gpt4 book ai didi

c# - 如何扩展 AuthorizeAttribute 并检查用户的角色

转载 作者:太空狗 更新时间:2023-10-30 00:27:48 25 4
gpt4 key购买 nike

我正忙着为我的名为 MyAuthorizeAttribute 的操作方法编写自己的自定义属性,我还在忙着编写代码,这是我的部分代码:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public new Role Roles;

public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);

if (Roles != 0) // Did it this way to see what the value of Roles was
return;

// Here I am going to get a list of user roles
// I'm doing my own database calls

filterContext.Result = new HttpUnauthorizedResult();
}
}

这是我的角色枚举:

public enum Role
{
Administrator = 1,
SuperAdministrator = 2
}

我的操作方法:

[MyAuthorize(Roles = Role.Administrator|Role.SuperAdministrator)]
public ActionResult Create()
{
return View();
}

我之所以没有使用 Roles = "Administrator,SuperAdministrator"是因为角色是硬编码的。如果角色名称更改,我不想更改 100 个位置。

根据我的方法,当它到达 if (Roles != 0) then Roles total value is 3 时,我将如何检查这 2 个角色是否在特定用户的用户角色列表中?

我在这里做的对吗?如果不是,我将如何实现呢?它不一定是我做的方式。

最佳答案

如果 MyAuthorizeAttribute 接受一个 IList(或类似的)不是更好吗这样它既是类型安全的,又不必使用位标志。如果您想保存结果,位标志非常有用,但这是另一种方式。

编辑(现在有例子):

Attribute:

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public Role[] RoleList { get; set; }


protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
//Only role access is implemented here
/*if ((this._usersSplit.Length > 0) && !this._usersSplit.Contains<string>(user.Identity.Name, StringComparer.OrdinalIgnoreCase))
{
return false;
}*/
if ((RoleList.Length > 0) && !RoleList.Select(p=>p.ToString()).Any<string>(new Func<string, bool>(user.IsInRole)))
{
return false;
}
return true;
}

}

Controller :

[MyAuthorize(RoleList = new []{Role.Administrator , Role.SuperAdministrator} )]
public ActionResult Create()
{
return View();
}

关于c# - 如何扩展 AuthorizeAttribute 并检查用户的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5117782/

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