按用户和挂钩过滤管理器中的 PageList
Filtering PageList in Manager by User & Hooks
我想让 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 也会列出所有页面。如果有人能帮我看看我的错在哪里,我将不胜感激。
此致,
取消
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)。为了过滤视图,您需要过滤两个集合。
/霍坎
我想让 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 也会列出所有页面。如果有人能帮我看看我的错在哪里,我将不胜感激。
此致, 取消
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)。为了过滤视图,您需要过滤两个集合。
/霍坎