将 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
事件,但这更像是一种破解,而不是正确的解决方案。)
问题:
- 如何过滤使用 Umbraco 角色的用户?
- 角色名称究竟是什么?他们是用户组名称还是其他名称?
更新:
(我试图改进下面的答案,但被拒绝了,所以我会在这里添加我的发现)
[Authorize(Roles = "admin")]
一个正在工作!
我正在玩弄它。为了让它工作,它仍然需要在 "umbraco/backoffice" 以下,但它不必是 UmbracoAuthorizedController
它似乎在(仅)RenderMvcController
[=19= 时工作正常]
内置角色名称是:
- "admin"
- "sensitiveData"
- "translator"
- "writer"
- "editor"
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
方法中看到这个细节:
和 ValidateRequestAttempt
中的方法:
这不是我所期望的!
要实现您的要求,您可以从 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 组。
我创建了一个新的控制器,继承自 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
事件,但这更像是一种破解,而不是正确的解决方案。)
问题:
- 如何过滤使用 Umbraco 角色的用户?
- 角色名称究竟是什么?他们是用户组名称还是其他名称?
更新:
(我试图改进下面的答案,但被拒绝了,所以我会在这里添加我的发现)
[Authorize(Roles = "admin")]
一个正在工作!
我正在玩弄它。为了让它工作,它仍然需要在 "umbraco/backoffice" 以下,但它不必是 UmbracoAuthorizedController
它似乎在(仅)RenderMvcController
[=19= 时工作正常]
内置角色名称是:
- "admin"
- "sensitiveData"
- "translator"
- "writer"
- "editor"
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
方法中看到这个细节:
和 ValidateRequestAttempt
中的方法:
这不是我所期望的!
要实现您的要求,您可以从 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 组。