4

我想对 DNN 角色的 API 调用应用授权。这样 DNN 本身就会检查登录的用户是否有权访问特定的 API 调用。我有一个解决方案,但不完全是我想要的。=>如何在基于 DNN 的 Web API 上处理安全/身份验证。此链接建议为 API 授权设置单独的模块,以便我们可以为该模块分配角色,并通过在 API 调用中使用 [SupportedModules("ModuleName")] 属性来限制授权。我检查了这个例子,但没有运气......PLZ建议我正确的方法。

4

2 回答 2

3

只要您将 DnnApiController 作为 7.x 的一部分使用,您就可以简单地将此属性添加到任何需要基于角色授权的方法。

[DnnAuthorize(StaticRoles = "MyRoleNameHere")]

其中“MyRoleNameHere”是用户必须拥有的角色的名称。

于 2013-04-30T14:31:28.847 回答
2

你检查过这个帖子吗? http://www.dotnetnuke.com/Resources/Blogs/EntryId/3329/Authorization-in-the-new-DNN-Services-Framework.aspx

我发现这很有用(以及您提到的其他答案)......但是我花了很长时间才理解它!到目前为止,我的想法是:如果您使用的是网络浏览器,DNN 可以接受您的请求并评估权限(基于您的登录)。链接的博客条目通过一个列出选项卡的 API 演示了这一点——它只显示您的登录名有权查看的选项卡。如果您从其他地方(例如在 PHP 脚本中)编写 HTTP 请求,您可以在发送请求的用户名/密码时看到相同的行为。

您可以使用 DnnAuthorize 属性,但由于您提到的原因,直接使用角色名称可能会出现问题——如果它们发生变化怎么办?但是,您可以编写自己的属性。基本上,它将需要(以某种方式、形状或形式)一个 TabID 和 ModuleID。这样,您可以让 DNN 检查当前用户对该模块的权限,而不是检查角色名称。

您可以为它编写一个模块,为您的模块分配基于角色的权限,并让 DNN 只检查给定登录的选项卡/模块。编写您自己的属性将使分配控制器中的权限变得容易......无需直接指定角色。

我相信这个链接是指 DNN 6.2,所以可能与 7 有一些差异。

于 2013-05-09T21:21:39.797 回答