Piranha cms 按用户筛选管理器中的页面列表&;钩子

Piranha cms 按用户筛选管理器中的页面列表&;钩子,piranha-cms,Piranha Cms,我想让Piranha CMS管理器屏幕列出仅由登录用户创建的页面。我认为应该使用PageListModelLoaded钩子来实现这一点,并在global.asax中编写了这段代码 protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); Hooks.Manager.PageListModelLoa

我想让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();     
   };
}
不幸的是,这并不像我预期的那样有效,即使我看到模型的计数,管理器也会列出所有页面。通过逐步调试,页面数等于零。如果有人能帮我找出我的错,我会很感激的

问候,,
Umit

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

var user_id = new Guid(controller.User.Identity.Name);
致以最良好的祝愿

编辑2015-01-16

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

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


/Håkan

谢谢@HåkanEdling,但您获取用户id的代码返回的guid与我在问题中编写的guid相同。返回的guid可能是对的,也可能是错的,真正的问题是即使从条件为0的位置返回的model.pages计数,页面仍会列在管理器中。(我使用的是PiranhaCmsMvc nuget软件包附带的示例应用程序,在数据库中,只有一个页面是由用户guid{ca19d4e7-92f0-42f6-926a-68413bbdafbc}创建的,登录用户的guid是{309d6b3a-26c7-4cfb-a71e-6e1b83993960},这一页面仍然列出)感谢@HåkanEdling,您编辑的答案解决了我的问题。我甚至尝试过只过滤网站地图和删除页面过滤器,发现输入正确的单词会导致过滤页面出现。也许这可以作为创建秘密页面的一种方式,只有拥有秘密单词并知道搜索它的用户才能看到秘密页面:)