web-dev-qa-db-ja.com

com_configを使用して複数のコンポーネントレベルのACLルールを表示および保存する方法はありますか?

いつものように、IDEをいじくり回しています。今日の課題は、テスト管理コンポーネントのさまざまなマネージャー(リスト/フォームビュー)ごとにビューレベルのACLルールを設定することです。

まず、必要なセクションをaccess.xmlファイルに追加しました

<?xml version="1.0" encoding="UTF-8"?>
<access component="com_babelu_exams">
<section name="component">
    <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" />
</section>
<section name="category">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_CATEGORY_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_CATEGORY_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_CATEGORY_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_CATEGORY_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_CATEGORY_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_CATEGORY_DESC" />
</section>
<section name="level">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_LEVEL_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_LEVEL_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_LEVEL_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_LEVEL_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_LEVEL_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_LEVEL_DESC" />
</section>
<section name="exam">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_EXAM_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_EXAM_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_EXAM_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_EXAM_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_EXAM_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_EXAM_DESC" />
</section>
<section name="section">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_SECTION_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_SECTION_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_SECTION_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_SECTION_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_SECTION_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_SECTION_DESC" />
</section>
<section name="problem">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_PROBLEM_DESC" />
    <action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_PROBLEM_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_PROBLEM_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_PROBLEM_DESC" />
    <action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_PROBLEM_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_PROBLEM_DESC" />
</section>
<section name="result">
    <action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_RESULT_DESC" />
    <action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_RESULT_DESC" />
    <action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_RESULT_DESC" />
    <action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_RESULT_DESC" />
</section>

次に、権限フィールドセットの下のconfig.xmlにこれらを追加しようとしました

<!-- SOF PERMISSIONS -->
<fieldset name="permissions" description="JCONFIG_PERMISSIONS_DESC"
    label="JCONFIG_PERMISSIONS_LABEL">
    <field name="rules" type="rules" component="com_babelu_exams"
        filter="rules" validate="rules" label="JCONFIG_PERMISSIONS_LABEL"
        section="component" />

    <field name="rules" type="rules" component="com_babelu_exams"
           filter="rules" validate="rules" label="JCONFIG_PERMISSIONS_LABEL"
           section="category" />
</fieldset>
<!-- EOF PERMISSIONS -->

ただし、カテゴリルールがコンポーネントルールを上書きしたため、これは機能しませんでした。だから私はルールを配列にしてみました

<!-- SOF PERMISSIONS -->
<fieldset name="permissions" description="JCONFIG_PERMISSIONS_DESC"
    label="JCONFIG_PERMISSIONS_LABEL">
    <field name="rules[]" type="rules" component="com_babelu_exams"
        filter="rules" validate="rules" label="JCONFIG_PERMISSIONS_LABEL"
        section="component" />

    <field name="rules[]" type="rules" component="com_babelu_exams"
           filter="rules" validate="rules" label="JCONFIG_PERMISSIONS_LABEL"
           section="category" />
</fieldset>
<!-- EOF PERMISSIONS -->

しかし、これは同じ効果がありました。そのため、コンポーネント属性にセクションを追加しようとしましたが、これにより、権限コントロール全体が空白になりました。

それで、私がやろうとしていることがcom_configコンポーネントビュー内で可能かどうか誰かが知っていますか?

これをコンポーネントレベルで保持したいのは、完全なカスケードACLを実現しようとしているためです。特権管理者がACLをコンポーネント->ビュー->レコードに設定できる場所。これにより、現在のユーザーのアクセス許可に関連しないコンポーネントのセクションを非表示にできます。

したがって、com_configを使用してこれを行う方法を知っている場合は、私に知らせてください。 = ^ D当面の間、解決策を探します。見つけたら、投稿します。

Happy Joomla!ng

1
Mathew Lenning

タイプミスかどうかは不明ですが、access.xmlに</access>の終了タグがありません。

私は試したことはありませんが、同じ設定で複数の権限フィールドを持つことはできないと思います。

  • componentセクションは、コンポーネントレベルのオプションで使用されます。
  • categoryは、com_categoriesが単一カテゴリのアクセス許可のために使用します。
  • その他は、単一アイテムのアクセス許可に使用できます。 com_contentの場合と同様に、articleセクションがあり、各記事の権限を個別に設定するために使用されます。

ビューごとに個別のACLが必要な場合は、独自のACLルールを作成する必要があり、コアのルールを使用しないでください。 com_babelu_exams.level.createのように。

0
Bakual