gpt4 book ai didi

ASP.NET MVC3 : custom [authorise] attribute

转载 作者:行者123 更新时间:2023-12-01 09:35:28 26 4
gpt4 key购买 nike

在我的数据库中,系统用户有一个他/她可以访问的模块列表。

我希望能够添加一个授权属性来检查是否是这种情况。

例如[authorise(UserID, ControllerName)]

这涉及到一些代码,确保指定了 UserID 的用户在他/她的列表中具有 Controller 名称。

目前,您可以通过使用 URL 简单地绕过选项卡不可见的事实。 (我的代码已经检查用户是否指定了访问权限并隐藏/显示选项卡)

最佳答案

public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}

string currentUser = httpContext.User.Identity.Name;
string currentController = httpContext.Request.RequestContext.RouteData.GetRequiredString("controller");

// TODO: go hit your database and see if currentUser can access
// currentController and return true/false from here

...
}
}

然后装饰你的 Controller 或 Action :

[MyAuthorize]
public class FooController: Controller
{
...
}

话虽如此,我怀疑您可能在数据库设计中走错了路,即存储了哪些用户有权访问哪些 Controller 操作的列表。可能您应该为此使用角色。让数据库知道 Controller 感觉不对。

所以:

[Authorize(Roles = "Foo,Bar")]
public class FooController: Controller
{
...
}

只有具有 FooBar 角色的用户才能访问 FooController

关于ASP.NET MVC3 : custom [authorise] attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923423/

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