首页 > 解决方案 > 仅将 UmbracoAuthorizedController 限制为 Umbraco 管理员用户

问题描述

我创建了一个新控制器,继承自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事件,但这更像是一个黑客而不是一个适当的解决方案。)

问题:

更新:

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

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

我在玩它。为了使它工作,它仍然需要在“umbraco/backoffice”下,但它不一定是一个UmbracoAuthorizedController它似乎工作正常的时候(仅)RenderMvcController

内置角色名称是:

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

标签: c#authorizationumbracoumbraco8

解决方案


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

这不是我所期望的!

要实现您的要求,您可以从控制器继承并使用标准 MVC属性Umbraco.Web.Mvc.UmbracoController对其进行装饰。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 组在哪里。


推荐阅读