1

我想让 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 也会列出所有页面。如果有人帮我看看我的错是什么,我将不胜感激。

问候, 乌米特

4

1 回答 1

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

这样做的原因是页面以树结构(站点地图)显示,但是当您在搜索字段中键入内容时,会返回一个平面列表(页面)。为了过滤视图,您需要过滤两个集合。

/哈坎

于 2015-01-15T22:00:28.293 回答