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 contentTypes = contentTypeDefinitions.Where(ctd => ctd.Settings.GetModel <ContentTypeSettings>().Creatable).OrderBy(ctd => ctd.DisplayName); if (contentTypes.Any()) { builder.Add(T("New"), "-1", menu => { menu.LinkToFirstChild(false); foreach (var contentTypeDefinition in contentTypes) { var ci = _contentManager.New(contentTypeDefinition.Name); var cim = _contentManager.GetItemMetadata(ci); var createRouteValues = cim.CreateRouteValues; // review: the display name should be a LocalizedString if (createRouteValues.Any()) { menu.Add(T(contentTypeDefinition.DisplayName), "5", item => item.Action(cim.CreateRouteValues["Action"] as string, cim.CreateRouteValues["Controller"] as string, cim.CreateRouteValues) // Apply "PublishOwn" permission for the content type .Permission(DynamicPermissions.CreateDynamicPermission(DynamicPermissions.PermissionTemplates[Permissions.PublishOwnContent.Name], contentTypeDefinition))); } } }); } }
public int UpdateFrom2() { //Assigns the "Create Permission" to all roles able to create contents var contentEditPermissions = new[] { Core.Contents.Permissions.EditContent, Core.Contents.Permissions.EditOwnContent }; var dynamicPermissions = new Orchard.Core.Contents.DynamicPermissions(_contentDefinitionManager); var securableTypes = _contentDefinitionManager.ListTypeDefinitions() .Where(ctd => ctd.Settings.GetModel <ContentTypeSettings>().Securable); var permissionTemplates = Core.Contents.DynamicPermissions.PermissionTemplates; List <object> dynContentPermissions = new List <object>(); foreach (var typeDefinition in securableTypes) { dynContentPermissions.Add(new { Permission = DynamicPermissions.CreateDynamicPermission(permissionTemplates[Core.Contents.Permissions.EditContent.Name], typeDefinition), CreatePermission = DynamicPermissions.CreateDynamicPermission(permissionTemplates[Core.Contents.Permissions.CreateContent.Name], typeDefinition) }); dynContentPermissions.Add(new { Permission = DynamicPermissions.CreateDynamicPermission(permissionTemplates[Core.Contents.Permissions.EditOwnContent.Name], typeDefinition), CreatePermission = DynamicPermissions.CreateDynamicPermission(permissionTemplates[Core.Contents.Permissions.CreateContent.Name], typeDefinition) }); } var roles = _roleService.GetRoles(); foreach (var role in roles) { var existingPermissionsNames = role.RolesPermissions.Select(x => x.Permission.Name).ToList(); var checkForDynamicPermissions = true; var updateRole = false; if (existingPermissionsNames.Any(x => x == Core.Contents.Permissions.CreateContent.Name)) { continue; // Skipping this role cause it already has the Create content permission } var simulation = UserSimulation.Create(role.Name); foreach (var contentEditPermission in contentEditPermissions) { if (_authorizationService.TryCheckAccess(contentEditPermission, simulation, null)) { existingPermissionsNames.Add(Core.Contents.Permissions.CreateContent.Name); checkForDynamicPermissions = false; updateRole = true; break; } } if (checkForDynamicPermissions) { foreach (var dynContentPermission in dynContentPermissions) { if (!existingPermissionsNames.Contains(((dynamic)dynContentPermission).CreatePermission.Name)) // Skipping this permission cause it already has the Create content variation { if (_authorizationService.TryCheckAccess(((dynamic)dynContentPermission).Permission, simulation, null)) { existingPermissionsNames.Add(((dynamic)dynContentPermission).CreatePermission.Name); updateRole = true; } } } } if (updateRole) { var rolePermissionsNames = existingPermissionsNames; _roleService.UpdateRole(role.Id, role.Name, rolePermissionsNames); } } return(3); }