mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding lists permissions
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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" />
|
||||||
|
42
src/Orchard.Web/Modules/Orchard.Lists/Permissions.cs
Normal file
42
src/Orchard.Web/Modules/Orchard.Lists/Permissions.cs
Normal 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",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user