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();     
   };
}

残念ながら、これは期待どおりに機能しません。モデルの数が表示されていても、Manager はすべてのページを一覧表示します。段階的なデバッグにより、Pages はゼロに等しくなります。誰かが私のせいが何であるかを理解するのを手伝ってくれたら幸いです.

よろしく、 ウミット

4

1 に答える 1

1

Piranha CMS の認証マネージャーはFormsAuthenticationを使用するため、ログインしているユーザーのユーザー ID を取得する正しい方法は次のとおりです。

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

よろしくお願いします!

編集 2015-01-16

わかりましたので、私はあなたの質問を詳しく調べました。ページ リスト ビューには、実際にはそのビュー モデルを介して 2 つのコレクションが供給されます。ページの 1 つのフラット リストmodel.Pagesと 1 つの階層コレクションmodel.SiteMap。ツリー構造のレンダリングの呼び出しは次のとおりです。

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

これは、ページがツリー構造 (SiteMap) で表示されますが、検索フィールドに何かを入力すると、フラット リスト (ページ) が返されるためです。ビューをフィルタリングするには、両方のコレクションをフィルタリングする必要があります。

/ホーカン

于 2015-01-15T22:00:28.293 に答える