我想让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
答案 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)。为了过滤视图,您需要过滤两个集合。
/哈坎