将UmbracoAuthorizedController限制为仅Umbraco管理员用户

时间:2019-10-22 11:20:17

标签: c# authorization umbraco umbraco8

我创建了一个新的控制器,该控制器继承自Umbraco.Web.Mvc.UmbracoAuthorizedController,并试图将其限制为仅登录 Umbraco Administrators

我当前的解决方案仅显示已登录umbraco用户的视图,但我不能仅过滤管理员。

代码:

我有一个作曲家,并且设置了路由配置:

public class ApplicationEventComposer : IComposer
{
    public void Compose(Composition composition)
    {
        RouteTable.Routes.MapRoute(
            name: "ITTest",
            url: "umbraco/backoffice/ITTest/{action}/{id}",
            defaults: new { controller = "ITTest", action = "Index", id = UrlParameter.Optional }
        );
        composition.Register<ITTestController>(Lifetime.Request);
    }
}

我有一个控制器:

public class ITTestController : Umbraco.Web.Mvc.UmbracoAuthorizedController
{
   public ActionResult Index()
   {
       return View("/Views/ITTest/Index.cshtml");
   }
}

我试图添加其他属性以仅针对管理员进行过滤,例如:

[UmbracoAuthorize(Roles = "admin")]
[UmbracoApplicationAuthorize(Roles = "admin")]
[AdminUsersAuthorize]

尝试了不同的角色,例如“管理员”,“管理员”,“管理员”,“管理员”等,但似乎没有任何作用。

(附带说明:目前,我正在考虑一种解决方法,并覆盖OnAuthorization事件,但这比真正的解决方案更像是黑客。)

问题:

  • 如何使用Umbraco角色过滤用户?
  • 确切的角色名称是什么?他们是用户组名称还是其他名称?

更新

(我尝试改善下面的答案,但被拒绝了,所以我将在这里添加我的发现)

[Authorize(Roles = "admin")]正在工作!

我正在玩它。要使其正常运行,仍需要将其置于“ umbraco / backoffice”下,但不必一定是UmbracoAuthorizedController,当它(仅)RenderMvcController

时似乎可以正常工作

内置角色名称为:

  • “管理员”
  • “ sensitiveData”
  • “翻译”
  • “作家”
  • “编辑”

有关更多信息:https://our.umbraco.com/forum/using-umbraco-and-getting-started/99651-limit-umbracoauthorizedcontroller-to-umbraco-admin-users-only#comment-313527

2 个答案:

答案 0 :(得分:0)

UmbracoAuthorizedController控制器实际上只是向您的控制器添加了UmbracoAuthorize属性,但是看来该属性会忽略您传递的任何角色,而只是检查访问者是否是经过身份验证的后台用户。 / p>

您可以在AuthorizeCore方法中查看详细信息:

https://github.com/umbraco/Umbraco-CMS/blob/853087a75044b814df458457dc9a1f778cc89749/src/Umbraco.Web/Mvc/UmbracoAuthorizeAttribute.cs

和其中的ValidateRequestAttempt方法:

https://github.com/umbraco/Umbraco-CMS/blob/853087a75044b814df458457dc9a1f778cc89749/src/Umbraco.Web/Security/WebSecurity.cs

这不是我期望的!

要实现所需的功能,可以从Umbraco.Web.Mvc.UmbracoController控制器继承并使用标准MVC Authorize属性对其进行修饰。

我已经在Umbraco 8.2.0中成功测试了以下内容:

    public class ITTestController : Umbraco.Web.Mvc.UmbracoController
    {
        [Authorize(Roles = "someGroup")]
        public ActionResult Index()
        {
            return View("/Views/ITTest/Index.cshtml");
        }
    }

其中someGroup是您希望允许的Umbraco组。

答案 1 :(得分:-1)

Umbraco文档:

https://our.umbraco.com/documentation/Implementation/Controllers/

建议您应该使用Invoke-Command -ScriptBlock { Start-Process $PSScriptRoot\ServiceUI.exe -process:TSProgressUI.exe %SYSTEMROOT%\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -windowstyle hidden -executionpolicy bypass -command ${function:New-PopupMessage} -ArgumentList @Params } 属性(我认为您已经尝试过),因此我将“角色”更新为Umbraco.Web.Mvc.UmbracoAuthorizeAttribute,这样您就可以找到类似的内容:

Roles = "Administrators"
相关问题