Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System.Reflection;
using Grand.Domain.Permissions;
using Grand.Web.Admin.Controllers;
using Grand.Web.AdminShared.Controllers;
using Grand.Web.Common.Security.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Grand.Web.Admin.Tests.Controllers;

[TestClass]
public class CreateActionPermissionTests
{
// Opening a create form and submitting it are one operation, so a form that requires
// PermissionActionName.Create has to be submitted under the same action.
[TestMethod]
public void CreateFormPost_RequiresTheSameActionAsItsForm()
{
var forms = new[] { typeof(BaseProductController).Assembly, typeof(VendorController).Assembly }
.SelectMany(assembly => assembly.GetTypes())
.Where(type => typeof(Controller).IsAssignableFrom(type))
.SelectMany(type => type.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly))
.GroupBy(method => $"{method.DeclaringType!.Name}.{method.Name}")
.Where(action => action.Any(method => !IsPost(method) && RequiredAction(method) == PermissionActionName.Create))
.ToList();

var mismatched = forms
.Where(action => action.Any(method => IsPost(method) && RequiredAction(method) != PermissionActionName.Create))
.Select(action => action.Key)
.ToList();

Assert.IsTrue(forms.Any(action => action.Key == "BaseProductController.Create"));
Assert.AreEqual(0, mismatched.Count, string.Join(", ", mismatched));
}

private static bool IsPost(MethodInfo method) => method.IsDefined(typeof(HttpPostAttribute), false);

private static string RequiredAction(MethodInfo method) =>
method.GetCustomAttribute<PermissionAuthorizeActionAttribute>()?.PermissionAction;
}
2 changes: 1 addition & 1 deletion src/Web/Grand.Web.Admin/Controllers/AffiliateController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(AffiliateModel model, bool continueEditing)
Expand Down
2 changes: 1 addition & 1 deletion src/Web/Grand.Web.Admin/Controllers/CampaignController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(CampaignModel model, bool continueEditing)
Expand Down
4 changes: 2 additions & 2 deletions src/Web/Grand.Web.Admin/Controllers/CourseController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(CourseModel model, bool continueEditing)
Expand Down Expand Up @@ -367,7 +367,7 @@ public async Task<IActionResult> CreateLesson(string courseId)
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CreateLesson(CourseLessonModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public IActionResult Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(CustomerGroupModel model, bool continueEditing)
Expand Down
4 changes: 2 additions & 2 deletions src/Web/Grand.Web.Admin/Controllers/DocumentController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public async Task<IActionResult> CreateDocument(SimpleDocumentModel simpleModel)
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CreateDocument(DocumentModel model, bool continueEditing)
Expand Down Expand Up @@ -170,7 +170,7 @@ public IActionResult CreateType()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CreateType(DocumentTypeModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public async Task<IActionResult> CreateCategory()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CreateCategory(KnowledgebaseCategoryModel model, bool continueEditing)
Expand Down Expand Up @@ -182,7 +182,7 @@ public async Task<IActionResult> CreateArticle(string parentCategoryId)
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CreateArticle(KnowledgebaseArticleModel model, bool continueEditing)
Expand Down
2 changes: 1 addition & 1 deletion src/Web/Grand.Web.Admin/Controllers/VendorController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(VendorModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(BlogPostModel model, bool continueEditing)
Expand Down Expand Up @@ -252,7 +252,7 @@ public async Task<IActionResult> CategoryCreate()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> CategoryCreate(BlogCategoryModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public async Task<IActionResult> Create([FromServices] CatalogSettings catalogSe
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(BrandModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(CategoryModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public async Task<IActionResult> Create([FromServices] CatalogSettings catalogSe
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(CollectionModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(NewsItemModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(PageModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public async Task<IActionResult> Create()
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> Create(ProductModel model, bool continueEditing)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ public async Task<IActionResult> AddShipment(string orderId)
return View(model);
}

[PermissionAuthorizeAction(PermissionActionName.Edit)]
[PermissionAuthorizeAction(PermissionActionName.Create)]
[HttpPost]
[ArgumentNameFilter(KeyName = "save-continue", Argument = "continueEditing")]
public async Task<IActionResult> AddShipment(AddShipmentModel model, bool continueEditing)
Expand Down
Loading