示例#1
0
        protected override MenuItemCollection PerformGetMenuForNode(string id, FormDataCollection queryStrings)
        {
            if (id == Constants.System.Root.ToInvariantString())
            {
                var menu = new MenuItemCollection();

                // if the user's start node is not the root then the only menu item to display is refresh
                if (UserStartNodes.Contains(Constants.System.Root) == false)
                {
                    menu.Items.Add(new RefreshNode(Services.TextService, true));
                    return(menu);
                }

                //set the default to create
                menu.DefaultMenuAlias = ActionNew.ActionAlias;

                // we need to get the default permissions as you can't set permissions on the very root node
                var permission  = Services.UserService.GetPermissions(Security.CurrentUser, Constants.System.Root).First();
                var nodeActions = _actions.FromEntityPermission(permission)
                                  .Select(x => new MenuItem(x));

                //these two are the standard items
                menu.Items.Add <ActionNew>(Services.TextService, opensDialog: true);
                menu.Items.Add <ActionSort>(Services.TextService, true);

                //filter the standard items
                FilterUserAllowedMenuItems(menu, nodeActions);

                if (menu.Items.Any())
                {
                    menu.Items.Last().SeparatorBefore = true;
                }

                // add default actions for *all* users
                menu.Items.Add(new RefreshNode(Services.TextService, true));

                return(menu);
            }


            //return a normal node menu:
            int iid;

            if (int.TryParse(id, out iid) == false)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            var item = Services.EntityService.Get(iid, UmbracoObjectTypes.Document);

            if (item == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }

            //if the user has no path access for this node, all they can do is refresh
            if (!Security.CurrentUser.HasContentPathAccess(item, Services.EntityService))
            {
                var menu = new MenuItemCollection();
                menu.Items.Add(new RefreshNode(Services.TextService, true));
                return(menu);
            }

            var nodeMenu = GetAllNodeMenuItems(item);

            //if the content node is in the recycle bin, don't have a default menu, just show the regular menu
            if (item.Path.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Contains(RecycleBinId.ToInvariantString()))
            {
                nodeMenu.DefaultMenuAlias = null;
                nodeMenu = GetNodeMenuItemsForDeletedContent(item);
            }
            else
            {
                //set the default to create
                nodeMenu.DefaultMenuAlias = ActionNew.ActionAlias;
            }

            var allowedMenuItems = GetAllowedUserMenuItemsForNode(item);

            FilterUserAllowedMenuItems(nodeMenu, allowedMenuItems);

            return(nodeMenu);
        }
示例#2
0
    protected override ActionResult <MenuItemCollection> PerformGetMenuForNode(string id, FormCollection queryStrings)
    {
        if (id == Constants.System.RootString)
        {
            MenuItemCollection menu = _menuItemCollectionFactory.Create();

            // if the user's start node is not the root then the only menu item to display is refresh
            if (UserStartNodes.Contains(Constants.System.Root) == false)
            {
                menu.Items.Add(new RefreshNode(LocalizedTextService, true));
                return(menu);
            }

            //set the default to create
            menu.DefaultMenuAlias = ActionNew.ActionAlias;

            // we need to get the default permissions as you can't set permissions on the very root node
            EntityPermission permission = _userService
                                          .GetPermissions(_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser, Constants.System.Root)
                                          .First();
            IEnumerable <MenuItem> nodeActions = _actions.FromEntityPermission(permission)
                                                 .Select(x => new MenuItem(x));

            //these two are the standard items
            menu.Items.Add <ActionNew>(LocalizedTextService, opensDialog: true, useLegacyIcon: false);
            menu.Items.Add <ActionSort>(LocalizedTextService, hasSeparator: true, opensDialog: true, useLegacyIcon: false);

            //filter the standard items
            FilterUserAllowedMenuItems(menu, nodeActions);

            if (menu.Items.Any())
            {
                menu.Items.Last().SeparatorBefore = true;
            }

            // add default actions for *all* users
            menu.Items.Add(new RefreshNode(LocalizedTextService, true));

            return(menu);
        }


        //return a normal node menu:
        if (int.TryParse(id, NumberStyles.Integer, CultureInfo.InvariantCulture, out int iid) == false)
        {
            return(NotFound());
        }

        IEntitySlim?item = _entityService.Get(iid, UmbracoObjectTypes.Document);

        if (item == null)
        {
            return(NotFound());
        }

        //if the user has no path access for this node, all they can do is refresh
        if (!_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser?.HasContentPathAccess(item, _entityService, _appCaches) ?? false)
        {
            MenuItemCollection menu = _menuItemCollectionFactory.Create();
            menu.Items.Add(new RefreshNode(LocalizedTextService, true));
            return(menu);
        }

        MenuItemCollection nodeMenu = GetAllNodeMenuItems(item);

        //if the content node is in the recycle bin, don't have a default menu, just show the regular menu
        if (item.Path.Split(Constants.CharArrays.Comma, StringSplitOptions.RemoveEmptyEntries)
            .Contains(RecycleBinId.ToInvariantString()))
        {
            nodeMenu.DefaultMenuAlias = null;
            nodeMenu = GetNodeMenuItemsForDeletedContent(item);
        }
        else
        {
            //set the default to create
            nodeMenu.DefaultMenuAlias = ActionNew.ActionAlias;
        }

        IEnumerable <MenuItem> allowedMenuItems = GetAllowedUserMenuItemsForNode(item);

        FilterUserAllowedMenuItems(nodeMenu, allowedMenuItems);

        return(nodeMenu);
    }