Asp.net web api 基于角色的授权

Asp.net web api 基于角色的授权,asp.net-web-api,dotnetnuke,role-base-authorization,Asp.net Web Api,Dotnetnuke,Role Base Authorization,我想对有关DNN角色的API调用应用授权。这样,DNN本身将检查登录用户是否有权访问特定的API调用。我有一个解决方案,但不是我想要的。此链接建议为API授权使用单独的模块,以便我们可以为此模块分配角色,并且通过在API调用上使用[SupportedModules(“ModuleName”)]属性,我们可以限制授权。我检查了这个例子,但没有运气…请建议我正确的方法来做它 只要在7.x中使用DnnApiController,就可以简单地将此属性添加到任何需要基于角色的授权的方法中 [DnnAuth

我想对有关DNN角色的API调用应用授权。这样,DNN本身将检查登录用户是否有权访问特定的API调用。我有一个解决方案,但不是我想要的。此链接建议为API授权使用单独的模块,以便我们可以为此模块分配角色,并且通过在API调用上使用[SupportedModules(“ModuleName”)]属性,我们可以限制授权。我检查了这个例子,但没有运气…请建议我正确的方法来做它

只要在7.x中使用DnnApiController,就可以简单地将此属性添加到任何需要基于角色的授权的方法中

[DnnAuthorize(StaticRoles = "MyRoleNameHere")]

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

您查看过这篇文章吗?

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

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

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


我相信链接是指DNN 6.2,因此可能与7有一些不同。

我感谢您的回答,但使用此解决方案,我可能无法动态更改角色。例如,如果我想更改角色或添加新角色以访问API,那么我需要通过更新StaticRoles值来更改代码。@Mitchel Sellers,要允许访问多个角色,只需使用逗号分隔即可?抱歉,请问,我如何才能在那里输入多个角色名称?是的,很抱歉响应延迟。逗号分隔似乎可以解决这个问题。在某种程度上,我做了以下几点。1.我创建了一个模块,仅用于设置访问API 2的角色。然后我在webconfig文件的appSetting中添加了相同的模块id,以了解此模块必须用于授权。3.然后我编写了我自己的Authorize属性,在其中我将登录用户角色与分配给模块的角色进行了比较。感谢所有人的帮助。。。!你对我的答案有什么建议。