在用户和管理员的过滤器中过滤PageList钩

时间:2015-01-15 01:16:20

标签: piranha-cms

我想让Piranha CMS管理器屏幕列出仅由登录用户创建的页面。我以为我应该使用PageListModelLoaded钩子来实现这一点并在global.asax中编写这段代码。

protected void Application_Start()
{
   AreaRegistration.RegisterAllAreas();
   RouteConfig.RegisterRoutes(RouteTable.Routes);
   Hooks.Manager.PageListModelLoaded += (controller, menu, model) =>
   {
       Guid user_id =  controller.User.GetProfile().Id;
       model.Pages = model.Pages.Where(p => p.CreatedBy == user_id).ToList();     
   };
}

不幸的是,这不能像我预期的那样工作,即使我通过调试一步一步看到model.Pages的数量等于零,Manager也会列出所有页面。如果有人帮助我了解我的错误,我感激不尽。

此致 Umit

1 个答案:

答案 0 :(得分:1)

Piranha CMS的身份验证管理器使用 FormsAuthentication ,因此获取登录用户的用户ID的正确方法是:

var user_id = new Guid(controller.User.Identity.Name);

祝你好运!

编辑2015-01-16

好的,所以我仔细看了一下你的问题。页面列表视图实际上通过其视图模型提供了两个集合。一个平面的页面列表model.Pages和一个层次集合model.SiteMap。您可以在此处看到用于渲染树结构的调用:

https://github.com/PiranhaCMS/Piranha/blob/2.2.4/Piranha/Areas/Manager/Views/Page/Index.cshtml#L178

原因是页面以树形结构(SiteMap)显示,但是当您在搜索字段中键入内容时,将返回一个平面列表(Pages)。为了过滤视图,您需要过滤两个集合。

/哈坎