0

デフォルトの RolesBasedAuthorizationService をほぼ同じコードに置き換えるカスタム モジュールがありますが、カスタム モジュールを有効にすると、ユーザーではなくサービスからロールがプルされます。サービスを有効にするには、[設定] に情報を入力し、ボックスをチェックする必要があります。

カスタム モジュールを使用すると (そして機能が有効になると) ロールが置き換えられるため、[ユーザーの編集] ページでロールを非表示にしたいと考えています。配置情報を理解するに従って、カスタム モジュールの placement.info で以下を使用して、ロール リストを正常に非表示にできます。

<Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="-" />
</Match>

ただし、モジュールの機能が有効になっている場合は常にリストが非表示になります。しかし、機能が魔法のように機能するために必要なことは、機能を有効にすることだけではありません。チェックボックスもチェックする必要があります (サービスベースの認証を有効にする前に、必要な設定を入力する機能を提供します)。したがって、同じドキュメントを続けて、ラッパーを作成して次のように適用できます。

<Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="Content:10;Wrapper=Wrapper_HideIfCondition" />
</Match>

これにより、次のようにロール リストをラップできるようになります。

<div style="display: block">
    @Model.Html
</div>

display: block現在、ラッパーが呼び出されていることを確認するために使用しています。ただし、役割の一覧は表示されなくなります。Orchard がラッパーを見つけられていないようです。cshtmlファイルは次の場所にありますMyCurrentTheme\Views\Wrapper.HideIfCondition.cshtml- モジュールに入れたいと思っていましたが、デフォルトの方法で (テーマで) 動作するようになるまで待ちます。

したがって、私の現在の質問は次のとおりです。ラッパーを見つけて使用するために何が欠けていますか?

4

1 に答える 1

1

さて、あなたが現在行っている方法ではうまくいかない理由は、あなたのテーマが管理者に適用されていないからです. 管理テーマは。したがって、コードを管理テーマに入れることができれば、機能します。それがあなたが下ろうとしているルートである場合は、できれば独自の管理テーマを作成してください。

モジュールに配置する場合は、モジュールが Orchard.Roles に依存していることを確認する必要があります。それ以外の場合、Orchard.Roles の配置が優先されます。したがって、module.txt には次の行が必要です。

Dependencies: Orchard.Roles

プレースメント ファイル:

 <Match ContentType="User">
  <Place Parts_Roles_UserRoles_Edit="Content:10;Wrapper=Wrappers_HideIfCondition" />
 </Match>

次に、ラッパーはビューフォルダーにあり、次のようなもので Wrappers.HideIfCondition.cshtml と呼ばれます。

@using Orchard.ContentManagement;

@{
    var condition = true;
}

@if(condition)
{
    @Display(Model.Metadata.ChildContent)
}

<p>I am a wrapper</p>

お役に立てれば

于 2013-05-09T20:17:04.947 に答える