将 UmbracoAuthorizedController 限制为 Umbraco 管理员用户

Limit UmbracoAuthorizedController to Umbraco Admin Users Only

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

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

代码:

我有一个 Composer,我设置了路由配置:

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]

并尝试了不同的角色,如 "admin"、"administrator"、"administrators"、"Administrators" 等,但似乎没有任何效果。

(旁注:目前我正在考虑一种解决方法并覆盖 OnAuthorization 事件,但这更像是一种破解,而不是正确的解决方案。)

问题:

更新:

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

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

我正在玩弄它。为了让它工作,它仍然需要在 "umbraco/backoffice" 以下,但它不必是 UmbracoAuthorizedController 它似乎在(仅)RenderMvcController[=19= 时工作正常]

内置角色名称是:

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

Umbraco 文档:

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

建议您应该使用 Umbraco.Web.Mvc.UmbracoAuthorizeAttribute 属性,我认为您已经尝试过,所以我只是将角色更新为 Roles = "Administrators",所以您有类似的内容:

[UmbracoAuthorize(Roles = "Administrators")]
public ActionResult Index()
{
   return View("/Views/ITTest/Index.cshtml");
}

UmbracoAuthorizedController 控制器实际上只是将 UmbracoAuthorize 属性添加到您的控制器,但似乎此属性忽略了您传入的任何角色,并且只是检查访问者是否是经过身份验证的后台用户.

你可以在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 组。