[Fixes 6890] Admin Menu: fix for "Content" item visibility. (#7464)

Fixes #6890
This commit is contained in:
GiuseppeMusso-Laser
2016-12-12 17:15:15 +01:00
committed by Sébastien Ros
parent 3bda4acee1
commit 27a9bae394

View File

@@ -3,16 +3,19 @@ using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.Core.Contents.Settings;
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation;
namespace Orchard.Core.Contents {
public class AdminMenu : INavigationProvider {
private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly IContentManager _contentManager;
private readonly IAuthorizer _authorizer;
public AdminMenu(IContentDefinitionManager contentDefinitionManager, IContentManager contentManager) {
public AdminMenu(IContentDefinitionManager contentDefinitionManager, IContentManager contentManager, IAuthorizer authorizer) {
_contentDefinitionManager = contentDefinitionManager;
_contentManager = contentManager;
_authorizer = authorizer;
}
public Localizer T { get; set; }
@@ -20,10 +23,17 @@ namespace Orchard.Core.Contents {
public void GetNavigation(NavigationBuilder builder) {
var contentTypeDefinitions = _contentDefinitionManager.ListTypeDefinitions().OrderBy(d => d.Name);
builder.AddImageSet("content")
.Add(T("Content"), "1.4", menu => menu
.Permission(Permissions.EditOwnContent)
.Add(T("Content Items"), "1", item => item.Action("List", "Admin", new { area = "Contents", id = "" }).LocalNav()));
var listableContentTypes = contentTypeDefinitions.Where(ctd => ctd.Settings.GetModel<ContentTypeSettings>().Listable);
ContentItem listableCi = null;
foreach(var contentTypeDefinition in listableContentTypes) {
listableCi = _contentManager.New(contentTypeDefinition.Name);
if(_authorizer.Authorize(Permissions.EditContent, listableCi)) {
builder.AddImageSet("content")
.Add(T("Content"), "1.4", menu => menu
.Add(T("Content Items"), "1", item => item.Action("List", "Admin", new { area = "Contents", id = "" }).LocalNav()));
break;
}
}
var contentTypes = contentTypeDefinitions.Where(ctd => ctd.Settings.GetModel<ContentTypeSettings>().Creatable).OrderBy(ctd => ctd.DisplayName);
if (contentTypes.Any()) {
builder.Add(T("New"), "-1", menu => {