Ejemplo n.º 1
0
        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)));
                        }
                    }
                });
            }
        }
Ejemplo n.º 2
0
        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);
        }