mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Updated Admin filter and access control
AdminController convention or [Admin] attribute activates both the security check and "TheAdmin" theme --HG-- branch : dev
This commit is contained in:
@@ -1,22 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Routing;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Localization;
|
||||
using Orchard.Security;
|
||||
using Orchard.Security.Permissions;
|
||||
using Orchard.Tests.Stubs;
|
||||
using Orchard.UI.Admin;
|
||||
|
||||
namespace Orchard.Tests.UI.Admin {
|
||||
[TestFixture]
|
||||
public class AdminAttributeTests {
|
||||
public class AdminAuthorizationFilterTests {
|
||||
|
||||
private static AuthorizationContext GetAuthorizationContext<TController>() {
|
||||
private static AuthorizationContext GetAuthorizationContext<TController>() where TController : ControllerBase, new() {
|
||||
var controllerDescriptor = new ReflectedControllerDescriptor(typeof(TController));
|
||||
var controllerContext = new ControllerContext();
|
||||
var controllerContext = new ControllerContext(new StubHttpContext(), new RouteData(), new TController());
|
||||
return new AuthorizationContext(
|
||||
controllerContext,
|
||||
controllerDescriptor.FindAction(controllerContext, "Index"));
|
||||
@@ -40,56 +37,39 @@ namespace Orchard.Tests.UI.Admin {
|
||||
Assert.That(authorizationContext.Result, Is.Null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AdminRequestShouldRequirePermission() {
|
||||
var authorizationContext = GetAuthorizationContext<AdminController>();
|
||||
private static void TestActionThatShouldRequirePermission<TController>() where TController : ControllerBase, new() {
|
||||
var authorizationContext = GetAuthorizationContext<TController>();
|
||||
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
|
||||
filter.OnAuthorization(authorizationContext);
|
||||
Assert.That(authorizationContext.Result, Is.InstanceOf<HttpUnauthorizedResult>());
|
||||
Assert.That(AdminThemeSelector.IsApplied(authorizationContext.RequestContext), Is.True);
|
||||
|
||||
var authorizationContext2 = GetAuthorizationContext<AdminController>();
|
||||
var authorizationContext2 = GetAuthorizationContext<TController>();
|
||||
var filter2 = new AdminAuthorizationFilter(GetAuthorizer(true));
|
||||
filter2.OnAuthorization(authorizationContext2);
|
||||
Assert.That(authorizationContext2.Result, Is.Null);
|
||||
Assert.That(AdminThemeSelector.IsApplied(authorizationContext2.RequestContext), Is.True);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void AdminRequestShouldRequirePermission() {
|
||||
TestActionThatShouldRequirePermission<AdminController>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void NormalWithAttribRequestShouldRequirePermission() {
|
||||
var authorizationContext = GetAuthorizationContext<NormalWithAttribController>();
|
||||
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
|
||||
filter.OnAuthorization(authorizationContext);
|
||||
Assert.That(authorizationContext.Result, Is.InstanceOf<HttpUnauthorizedResult>());
|
||||
|
||||
var authorizationContext2 = GetAuthorizationContext<NormalWithAttribController>();
|
||||
var filter2 = new AdminAuthorizationFilter(GetAuthorizer(true));
|
||||
filter2.OnAuthorization(authorizationContext2);
|
||||
Assert.That(authorizationContext2.Result, Is.Null);
|
||||
TestActionThatShouldRequirePermission<NormalWithAttribController>();
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void NormalWithActionAttribRequestShouldRequirePermission() {
|
||||
var authorizationContext = GetAuthorizationContext<NormalWithActionAttribController>();
|
||||
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
|
||||
filter.OnAuthorization(authorizationContext);
|
||||
Assert.That(authorizationContext.Result, Is.InstanceOf<HttpUnauthorizedResult>());
|
||||
|
||||
var authorizationContext2 = GetAuthorizationContext<NormalWithActionAttribController>();
|
||||
var filter2 = new AdminAuthorizationFilter(GetAuthorizer(true));
|
||||
filter2.OnAuthorization(authorizationContext2);
|
||||
Assert.That(authorizationContext2.Result, Is.Null);
|
||||
TestActionThatShouldRequirePermission<NormalWithActionAttribController>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void InheritedAttribRequestShouldRequirePermission() {
|
||||
var authorizationContext = GetAuthorizationContext<InheritedAttribController>();
|
||||
var filter = new AdminAuthorizationFilter(GetAuthorizer(false));
|
||||
filter.OnAuthorization(authorizationContext);
|
||||
Assert.That(authorizationContext.Result, Is.InstanceOf<HttpUnauthorizedResult>());
|
||||
|
||||
var authorizationContext2 = GetAuthorizationContext<InheritedAttribController>();
|
||||
var filter2 = new AdminAuthorizationFilter(GetAuthorizer(true));
|
||||
filter2.OnAuthorization(authorizationContext2);
|
||||
Assert.That(authorizationContext2.Result, Is.Null);
|
||||
TestActionThatShouldRequirePermission<InheritedAttribController>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +98,7 @@ namespace Orchard.Tests.UI.Admin {
|
||||
return View();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Admin]
|
||||
public class BaseWithAttribController : Controller {
|
||||
public ActionResult Something() {
|
58
src/Orchard.Tests/UI/Admin/AdminThemeSelectorTests.cs
Normal file
58
src/Orchard.Tests/UI/Admin/AdminThemeSelectorTests.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
using System.Web.Routing;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Tests.Stubs;
|
||||
using Orchard.UI.Admin;
|
||||
|
||||
namespace Orchard.Tests.UI.Admin {
|
||||
[TestFixture]
|
||||
public class AdminThemeSelectorTests {
|
||||
[Test]
|
||||
public void IsAppliedShouldBeFalseByDefault() {
|
||||
var context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
var isApplied = AdminThemeSelector.IsApplied(context);
|
||||
Assert.That(isApplied, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsAppliedShouldBeTrueAfterBeingApplied() {
|
||||
var context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
|
||||
AdminThemeSelector.Apply(context);
|
||||
Assert.That(AdminThemeSelector.IsApplied(context), Is.True);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void IsAppliedIsFalseOnNewContext() {
|
||||
var context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
|
||||
AdminThemeSelector.Apply(context);
|
||||
Assert.That(AdminThemeSelector.IsApplied(context), Is.True);
|
||||
context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
Assert.That(AdminThemeSelector.IsApplied(context), Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThemeResultShouldBeNullNormally() {
|
||||
var context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
|
||||
var selector = new AdminThemeSelector();
|
||||
var result = selector.GetTheme(context);
|
||||
Assert.That(result, Is.Null);
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void ThemeResultShouldBeTheAdminAt100AfterBeingSet() {
|
||||
var context = new RequestContext(new StubHttpContext(), new RouteData());
|
||||
|
||||
AdminThemeSelector.Apply(context);
|
||||
|
||||
var selector = new AdminThemeSelector();
|
||||
var result = selector.GetTheme(context);
|
||||
Assert.That(result, Is.Not.Null);
|
||||
Assert.That(result.ThemeName, Is.EqualTo("TheAdmin"));
|
||||
Assert.That(result.Priority, Is.EqualTo(100));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user