2011-05-23 53 views
2

我的谷歌技能是让我失望的。我正在寻找在ASP.Net MVC(3)中执行基于数据的权利的“正确方法”。基于数据的权利/授权在ASP.Net MVC 3

定期授权,其中只需要知道用户和路径可以使用[Authorize]属性完成,但这看起来不适用于基于数据的权利b/c需要连接到数据存储。

将支票插入操作方法的正确方法是明显的方法吗?

+0

什么是“基于数据的权利?”你的意思是“安全”还是“授权?”尝试寻找“ASP.NET MVC中基于表的安全性”。 – 2011-05-23 00:15:22

+0

@Robert - 没错,我已经更新了标题以反映这 – 2011-05-23 00:25:14

+0

http://stackoverflow.com/questions/1482135/custom-authorizeattribute – 2011-05-23 00:27:15

回答

1

是插入 检查到动作方法的 正道的明显的方法?

这就是我所做的。

if (!userHasAuthorization) 
    return view("Unauthorized"); 

这是迄今为止最简单的方法。

为了确保您只需执行一次“userHasAuthorization”,您可以在您的存储库或服务层中放入一个方法来检查授权,并使用该方法代替布尔值userHasAuthorization

0

不知道“基于数据的权利”是什么。我确实相信自定义动作过滤器会让你得到你想要的。这可以让你在授权的情况下管理任何你需要的路线,用户等的上下文。给予更细粒度的控制。也给你可重用性,所以你不需要将if语句插入到你的动作方法中。

http://msdn.microsoft.com/en-us/library/dd381609.aspx

+0

我想他在问什么:如何从数据库中查找授权值,而无需将您的自定义'AuthorizeAttribute'紧密耦合到数据库?这是我经常想知道的事情。自定义'AuthorizeAttribute'不能访问你的仓库,但是当你输入Action Method的时候,已经太晚了。 – 2011-05-23 00:21:12

+0

然后我会采用我在这里提到的这种方法,自定义动作过滤器让你在进入动作方法之前返回。 – Slappy 2011-05-23 00:25:49

0

您可以创建自[Authorize]属性导出的自定义操作筛选器,该属性使用数据存储来检查授权。

+0

关于如何做到这一点的任何细节 - 意思是,如何给MyAuthorize类一个'IDBConnection'的实例? – 2011-05-23 00:24:51