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 Core MVC 2.1授权基于每个用户的策略?

MVC 3 ASP.NET 角色-授权属性

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 17. 基于Claim和Policy的授权 上

ASP.Net MVC 3 将未经授权的用户重定向到 loginUrl