From 27a9bae3940df7a8b74575bc3cb243ee8628f36b Mon Sep 17 00:00:00 2001 From: GiuseppeMusso-Laser Date: Mon, 12 Dec 2016 17:15:15 +0100 Subject: [PATCH] [Fixes 6890] Admin Menu: fix for "Content" item visibility. (#7464) Fixes #6890 --- src/Orchard.Web/Core/Contents/AdminMenu.cs | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Core/Contents/AdminMenu.cs b/src/Orchard.Web/Core/Contents/AdminMenu.cs index 514c049ca..c4ef1314b 100644 --- a/src/Orchard.Web/Core/Contents/AdminMenu.cs +++ b/src/Orchard.Web/Core/Contents/AdminMenu.cs @@ -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().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().Creatable).OrderBy(ctd => ctd.DisplayName); if (contentTypes.Any()) { builder.Add(T("New"), "-1", menu => {