Adding lists permissions

This commit is contained in:
Sebastien Ros
2014-07-29 11:23:07 -07:00
parent 15e95d4e14
commit 9d3f5c2d20
4 changed files with 70 additions and 12 deletions

View File

@@ -4,6 +4,7 @@ using Orchard.ContentManagement;
using Orchard.Core.Containers.Models; using Orchard.Core.Containers.Models;
using Orchard.Core.Containers.Services; using Orchard.Core.Containers.Services;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation; using Orchard.UI.Navigation;
using Orchard.Utility.Extensions; using Orchard.Utility.Extensions;
@@ -11,10 +12,19 @@ namespace Orchard.Lists {
public class AdminMenu : INavigationProvider { public class AdminMenu : INavigationProvider {
private readonly IContainerService _containerService; private readonly IContainerService _containerService;
private readonly IContentManager _contentManager; private readonly IContentManager _contentManager;
private readonly IAuthorizationService _authorizationService;
private readonly IWorkContextAccessor _workContextAccessor;
public AdminMenu(IContainerService containerService, IContentManager contentManager) { public AdminMenu(
IContainerService containerService,
IContentManager contentManager,
IAuthorizationService authorizationService,
IWorkContextAccessor workContextAccessor
) {
_containerService = containerService; _containerService = containerService;
_contentManager = contentManager; _contentManager = contentManager;
_authorizationService = authorizationService;
_workContextAccessor = workContextAccessor;
} }
public Localizer T { get; set; } public Localizer T { get; set; }
@@ -29,12 +39,17 @@ namespace Orchard.Lists {
private void CreateListManagementMenuItem(NavigationBuilder builder) { private void CreateListManagementMenuItem(NavigationBuilder builder) {
builder.Add(T("Lists"), "11", item => item builder.Add(T("Lists"), "11", item => item
.Action("Index", "Admin", new {area = "Orchard.Lists"}) .Action("Index", "Admin", new {area = "Orchard.Lists"}).Permission(Permissions.ManageLists)
); );
} }
private void CreateListMenuItems(NavigationBuilder builder) { private void CreateListMenuItems(NavigationBuilder builder) {
var containers = _containerService.GetContainersQuery(VersionOptions.Latest).Where<ContainerPartRecord>(x => x.ShowOnAdminMenu).List().ToList(); var containers = _containerService
.GetContainersQuery(VersionOptions.Latest)
.Where<ContainerPartRecord>(x => x.ShowOnAdminMenu)
.List()
.Where(x => _authorizationService.TryCheckAccess(Orchard.Core.Contents.Permissions.EditContent, _workContextAccessor.GetContext().CurrentUser, x))
.ToList();
foreach (var container in containers) { foreach (var container in containers) {
var closureContainer = container; var closureContainer = container;

View File

@@ -129,7 +129,7 @@ namespace Orchard.Lists.Controllers {
break; break;
case ContentsBulkAction.PublishNow: case ContentsBulkAction.PublishNow:
foreach (var item in checkedContentItems) { foreach (var item in checkedContentItems) {
if (!_services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't publish selected lists."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't publish selected lists."))) {
_transactionManager.Cancel(); _transactionManager.Cancel();
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
} }
@@ -139,7 +139,7 @@ namespace Orchard.Lists.Controllers {
break; break;
case ContentsBulkAction.Unpublish: case ContentsBulkAction.Unpublish:
foreach (var item in checkedContentItems) { foreach (var item in checkedContentItems) {
if (!_services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't unpublish selected lists."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't unpublish selected lists."))) {
_transactionManager.Cancel(); _transactionManager.Cancel();
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
} }
@@ -149,7 +149,7 @@ namespace Orchard.Lists.Controllers {
break; break;
case ContentsBulkAction.Remove: case ContentsBulkAction.Remove:
foreach (var item in checkedContentItems) { foreach (var item in checkedContentItems) {
if (!_services.Authorizer.Authorize(Permissions.DeleteContent, item, T("Couldn't remove selected lists."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.DeleteContent, item, T("Couldn't remove selected lists."))) {
_transactionManager.Cancel(); _transactionManager.Cancel();
return new HttpUnauthorizedResult(); return new HttpUnauthorizedResult();
} }
@@ -435,7 +435,7 @@ namespace Orchard.Lists.Controllers {
var selectedItems = _contentManager.GetMany<ContainablePart>(selectedIds, VersionOptions.Latest, QueryHints.Empty); var selectedItems = _contentManager.GetMany<ContainablePart>(selectedIds, VersionOptions.Latest, QueryHints.Empty);
foreach (var item in selectedItems) { foreach (var item in selectedItems) {
if (!_services.Authorizer.Authorize(Permissions.EditContent, item, T("Couldn't move selected content."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.EditContent, item, T("Couldn't move selected content."))) {
return false; return false;
} }
@@ -455,7 +455,7 @@ namespace Orchard.Lists.Controllers {
private bool BulkRemoveFromList(IEnumerable<int> itemIds) { private bool BulkRemoveFromList(IEnumerable<int> itemIds) {
var selectedItems = _contentManager.GetMany<ContainablePart>(itemIds, VersionOptions.Latest, QueryHints.Empty); var selectedItems = _contentManager.GetMany<ContainablePart>(itemIds, VersionOptions.Latest, QueryHints.Empty);
foreach (var item in selectedItems) { foreach (var item in selectedItems) {
if (!_services.Authorizer.Authorize(Permissions.EditContent, item, T("Couldn't remove selected content from the list."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.EditContent, item, T("Couldn't remove selected content from the list."))) {
_services.TransactionManager.Cancel(); _services.TransactionManager.Cancel();
return false; return false;
} }
@@ -468,7 +468,7 @@ namespace Orchard.Lists.Controllers {
private bool BulkRemove(IEnumerable<int> itemIds) { private bool BulkRemove(IEnumerable<int> itemIds) {
foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) {
if (!_services.Authorizer.Authorize(Permissions.DeleteContent, item, T("Couldn't remove selected content."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.DeleteContent, item, T("Couldn't remove selected content."))) {
_services.TransactionManager.Cancel(); _services.TransactionManager.Cancel();
return false; return false;
} }
@@ -481,7 +481,7 @@ namespace Orchard.Lists.Controllers {
private bool BulkUnpublish(IEnumerable<int> itemIds) { private bool BulkUnpublish(IEnumerable<int> itemIds) {
foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) {
if (!_services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't unpublish selected content."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't unpublish selected content."))) {
_services.TransactionManager.Cancel(); _services.TransactionManager.Cancel();
return false; return false;
} }
@@ -494,7 +494,7 @@ namespace Orchard.Lists.Controllers {
private bool BulkPublishNow(IEnumerable<int> itemIds) { private bool BulkPublishNow(IEnumerable<int> itemIds) {
foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) {
if (!_services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't publish selected content."))) { if (!_services.Authorizer.Authorize(Orchard.Core.Contents.Permissions.PublishContent, item, T("Couldn't publish selected content."))) {
_services.TransactionManager.Cancel(); _services.TransactionManager.Cancel();
return false; return false;
} }

View File

@@ -66,6 +66,7 @@
<Compile Include="AdminMenu.cs" /> <Compile Include="AdminMenu.cs" />
<Compile Include="Drivers\ContainerPartDriver.cs" /> <Compile Include="Drivers\ContainerPartDriver.cs" />
<Compile Include="Drivers\ContainablePartDriver.cs" /> <Compile Include="Drivers\ContainablePartDriver.cs" />
<Compile Include="Permissions.cs" />
<Compile Include="Projections\ListSortCriteria.cs" /> <Compile Include="Projections\ListSortCriteria.cs" />
<Compile Include="Services\IFormProvider.cs" /> <Compile Include="Services\IFormProvider.cs" />
<Compile Include="Forms\ListFilterForm.cs" /> <Compile Include="Forms\ListFilterForm.cs" />

View File

@@ -0,0 +1,42 @@
using System.Collections.Generic;
using Orchard.Environment.Extensions.Models;
using Orchard.Security.Permissions;
namespace Orchard.Lists {
public class Permissions : IPermissionProvider {
public static readonly Permission ManageLists = new Permission { Description = "Manage lists", Name = "ManageLists" };
public virtual Feature Feature { get; set; }
public IEnumerable<Permission> GetPermissions() {
return new[] {
ManageLists,
};
}
public IEnumerable<PermissionStereotype> GetDefaultStereotypes() {
return new[] {
new PermissionStereotype {
Name = "Administrator",
Permissions = new[] {ManageLists}
},
new PermissionStereotype {
Name = "Editor",
Permissions = new[] {ManageLists}
},
new PermissionStereotype {
Name = "Moderator",
},
new PermissionStereotype {
Name = "Author",
},
new PermissionStereotype {
Name = "Contributor",
},
};
}
}
}