ASP.Net MVC 3 中基于数据的权利/授权
Posted
技术标签:
【中文标题】ASP.Net MVC 3 中基于数据的权利/授权【英文标题】:Data based entitlements/authorization in ASP.Net MVC 3 【发布时间】:2011-05-23 00:09:41 【问题描述】:我的谷歌技能在这方面让我失望。我正在寻找在 ASP.Net MVC (3) 中执行基于数据的权利的“正确方法”。
对于常规权利,人们只需要知道用户并且可以使用 [Authorize]
属性完成路线,但这似乎不适用于需要连接到的基于数据的权利 b/c数据存储。
在操作方法中插入检查的明显方法是否正确?
【问题讨论】:
什么是“基于数据的权利”?你的意思是“安全”还是“授权”?尝试寻找“ASP.NET MVC 中基于表的安全性”。 @Robert - 没错,我已经更新了标题以反映这一点 ***.com/questions/1482135/custom-authorizeattribute 【参考方案1】:是插入一个明显的方法 检查动作方法 正确的方式?
我就是这么做的。
if (!userHasAuthorization)
return view("Unauthorized");
这是迄今为止最简单的方法。
为确保您只需执行一次“userHasAuthorization”,您可以在存储库或服务层中放置一个检查授权的方法,并使用该方法代替布尔值 userHasAuthorization
。
【讨论】:
【参考方案2】:不知道什么是“基于数据的权利”。我相信自定义操作过滤器会给你你想要的。这使您可以通过路由、用户等的上下文来管理您在授权方面所需的任何内容。提供更细粒度的控制。还为您提供了可重用性,因此您无需将 if 语句插入到您的操作方法中。
http://msdn.microsoft.com/en-us/library/dd381609.aspx
【讨论】:
我想他要问的是:如何在不将自定义AuthorizeAttribute
紧密耦合到数据库的情况下从数据库中查找授权值?这是我自己经常想的事情。自定义的AuthorizeAttribute
无权访问您的存储库,但是当您已经输入 Action Method 时,为时已晚。
那我就用我这里提到的这种方法,自定义动作过滤器让你在进入动作方法之前返回。【参考方案3】:
您可以创建一个派生自 [Authorize]
属性的自定义操作过滤器,该属性使用数据存储来检查授权。
【讨论】:
关于如何做到这一点的任何细节 - 意思是,如何为 MyAuthorize 类提供IDBConnection
的实例?以上是关于ASP.Net MVC 3 中基于数据的权利/授权的主要内容,如果未能解决你的问题,请参考以下文章
使用 Azure AD 的 Asp.net core mvc 基于角色的授权
EF Core 中的 ASP.NET Core 5 MVC 和 Identity - 基于资源的授权
ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 17. 基于Claim和Policy的授权 上