限制Umbraco中每个节点的页面数量

时间:2015-01-29 14:24:59

标签: umbraco umbraco7

有没有办法向内容标签节点添加计数限制? 例如,您有以下节点结构:

Home
|
|-- About
|
|-- Projects
    |
    |-- Project 1
    |
    |-- Project 2
|
|-- News
    |
    |-- News 1
    |
    |-- News 2
|
|

...

客户1:

选择标准主机包并获得10个项目和10个新闻项目。

客户2:

选择最终的托管包,获得1000个项目和1000个新闻项目。

如何限制客户只创建某个项目和新网站?

2 个答案:

答案 0 :(得分:0)

您可以挂钩到Umbraco应用程序事件处理程序以捕获ContentService.Created事件(ContentService.Creating事件已过时,因为它提供了相同的选项)。

public class AppEvents : IApplicationEventHandler
{
    public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        ContentService.Created += ContentService_Creating;
    }
}

然后,您可以编写Created事件的扩展名,该扩展名将检查正在创建的页面类型,并根据当前用户的UserType应用限制。这只是意味着您取消事件并阻止创建页面。

public void ContentService_Creating(IContentService sender, Umbraco.Core.Events.NewEventArgs<IContent> e)
{
    switch (e.Entity.ContentType.Alias)
    {
        case "ProjectAlias":
        case "NewsItemAlias":
            var contentService = Umbraco.Web.UmbracoContext.Current.Application.Services.ContentService;
            var userTypeAlias = UmbracoContext.Current.Security.CurrentUser.UserType.Alias;
            var count = contentService.GetChildren(e.Entity.ParentId).Count();
            if (string.Equals(userTypeAlias, "Standard") && count >= 10)
            {
                e.Cancel = true;
            }
            else if (string.Equals(userTypeAlias, "Ultimate") && count >= 1000)
            {
                e.Cancel = true;
            }

            break;
        default:
            break;
    }
}

这是未经测试的,但我之前使用过类似的方法来阻止某些用户创建/删除页面。

答案 1 :(得分:0)

我建议您使用包 NodeRestrict

您可以通过配置文件指定用户可以在父节点下创建的最大节点。例如。对于你的情况:

@RequestMapping(value = "/init/filter", method = RequestMethod.GET)
    public final Reponse filterGrid(
            @RequestParam(value = "nom", required = false) final String nom,
            @RequestParam(value = "matricule", required = false) final String matricule,
            final HttpServletRequest httpRequete,
            final HttpServletResponse httpReponse, Model model) {
}