web-dev-qa-db-ja.com

ビューページの権限によってメニュー項目を作成するにはどうすればよいですか?

私のクライアントは、各コンテンツタイプのリンクを含むメニューを必要としています。

  • ユーザーがそのコンテンツタイプを作成する権限を持っている場合、各アイテムが表示されます。
  • 各アイテムには、そのコンテンツタイプのみのコンテンツのリストが表示されます。

これを実現するために、バンドル用のフィルターを持つビューページを作成します。このようにして、すべてのコンテンツタイプに同じビューページを使用できます。 / admin/contentのような同じビューページを使用することも試みましたが、そのマシン名をフィルターするためにコンテンツタイプを渡す必要があります。

私がやろうとしていることは、コンテンツタイプごとにメニューアイテムを作成し、コンテンツタイプごとの権限を使用してアイテム(リンク)ごとに権限を設定することです。

例:メニューにアイテム記事があります。このアイテムは、記事を作成する権利がある場合にのみ表示されます。ここをクリックすると、すべてのコンテンツArticles(/ admin/contentなど)が表示されます。

コンテンツタイプを作成する権限を持つユーザーまたはロールがアイテムを表示することを前提としています。

ビューへのアクセス権を持つメニュー項目を作成するにはどうすればよいですか?

ルートではなく、表示ページの権限を使用しているため、私の問題があります。

enter image description here

.links.menu.yml

content_types.admin_1:
 title: 'Articles'
 parent: content_types.admin_menu
 route_name: content_types.admin_1
 route_parameters:
  type: article
 description: 'Content articles'

content_types.admin_2:
 title: 'News'
 parent: content_types.admin_menu
 route_name: content_types.admin_2
 route_parameters:
  type: nouvelle
 description: 'Content news'

.routing.yml

content_types.admin_1:
  path: '/admin/view-test'
  defaults:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'Articles'
  requirements:
    _permission: 'create article content'

content_types.admin_2:
  path: '/admin/view-test'
  defaults:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'News'
  requirements:
    _permission: 'create nouvelle content'

ご覧のとおり、_permission: 'create article content'を追加しましたが、何もしませんでした。

admin/structure/views/view/view_test?destination =/en/admin/structure/views

enter image description here

私が使用しているユーザーのロールには、記事やニュースを作成する権限がありません。

更新:

.permissions.ymlを作成して_permission: 'access menu item 1'を使用しましたが、この権限がそのロールのチケットではない場合でもアイテムに表示されます。

.permissions.yml

'access menu item 1':
  title: Access Menu MTL 1
  description: Allow users to access menu MTL

なにか提案を?

更新:2019年1月

問題は、異なるアクセス許可を持つ各コンテンツタイプに対して同じビューページ(/ admin/content)を使用しようとすることです。各リンクに権限を設定するのではなく、アクセスしようとしているビュー(またはアイテム)に権限を設定します。

1
Carlos

私がしたこと:

動的メニューを使ってみました。しかし、それは私の目的には機能しません。なぜなら、各リンクメニューは、役割ごとに異なるアクセス権を持つ可能性があるからです。

その後、個々の権限を管理できるように、コンテンツのタイプごとにビューを作成する必要があることに気付きました。

したがって、CTを作成するたびにビューを作成する必要があるため、動的に行うのは意味がありません。

私がやった方法:

  1. タイプごとにフィルターの内容を含む各CTのビューを作成します。また、同じCTの各ビューに権限を設定しました。そしてカスタムルート。 enter image description here

  2. CTごとに1つのアイテムメニューを作成し、ビューと同じルートとして設定します。

.links.menu.yml

    vdm.tc_sujet:
     title: 'Sujets'
     parent: system.admin_content
     route_name: vdm.tc_sujets
     description: "Content type subject."
     weight: -1

.routing.yml

    vdm.tc_sujets:
     path: '/admin/content/sujet'
     defaults:
       _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
       _title: 'Sujets'
  1. その結果、ユーザーがそのビューにアクセスできる場合、アイテムメニューが表示されます。

enter image description here

:動的メニューは、ノードへのリンク項目の追加に最適です。

0
Carlos