Puncte:1

Restricționați vizibilitatea elementelor de meniu în funcție de permisiuni

drapel in

Am un meniu generat de module (folosind fișierul yaml) cu 5 elemente de meniu.Cerințele mele nu îmi permit să restricționez vizibilitatea elementelor de meniu în funcție de rol, deoarece rolurile pot fi adăugate dinamic. Deci trebuie să fac asta folosind doar permisiuni.

Ceea ce am incercat
(1) Restricționarea accesului la elementele de meniu folosind permisiunile de rută - aceasta arată o pagină interzisă, dar permite totuși ca elementul de meniu restricționat să fie vizibil

Vă rugăm să vedeți fișierele mele reale de mai jos:

portal_hrm_core.links.menu.yml

portal_hrm_core.hrm_link:
  titlu: „Manager de resurse umane”
  nume_rută: portal_hrm_core.hrm_link
  nume_meniu: hcm
  extins: ADEVĂRAT

portal_hrm_core.routing.yml

portal_hrm_core. hrm_link:
cale: „/admin/hrm” 
implicite:
  _controller: „\Drupal... systemAdminMenuBlockPage”
  _title: „HRM”
cerinte:
  _permis: „acces hrm_core_job+access_hrm_core_employee”

(2) module Contrib - Vizibilitatea elementelor de meniu și Element de meniu pe rol Ambele sunt bazate doar pe roluri și nu pot accepta permisiuni

Știu că pot merge la un nivel foarte scăzut și pot folosi ceva de genul hook_preprocess_meniu dar pare a fi greu pentru o cerință atât de simplă, având în vedere de câte ori poate fi numit acel cârlig.

Deci, oameni buni, vă rog alte sugestii?

Mulțumiri

drapel ru
Punctul AFAIK (1) este corect și ar trebui să ascunde, de asemenea, elementele de meniu (folosind acea metodă în propriile mele proiecte). Meniurile sunt foarte stocate în cache, ați șters memoria cache după ce ați adăugat permisiunile de rută?
ilechcod avatar
drapel in
Hudri - răspunsul tău rapid m-a încurajat! Mulțumiri. Vă rog, am actualizat întrebarea inițială cu fișierele mele sursă pentru examinarea dvs. Și am șters memoria cache folosind atât ```devel menu ui``` cât și ```drush cr```. Totuși, acest element de meniu rămâne vizibil indiferent de permisiuni și nu sunt autentificat ca administrator.
drapel ru
Este aproape exact același lucru pe care îl fac, pur și simplu nu am acea cheie `expanded: true` în fișierele mele, nu știu acea cheie. Am, de asemenea, o `opțiuni suplimentare: _admin_route: TRUE` în fișierele mele `routing.yml`, deoarece am nevoie de asta doar pentru paginile cu tema admin.
Puncte:0
drapel in

Funcționează acum. Mulțumesc Hudri că m-ai îndreptat în direcția corectă. Am verificat din nou sugestia ta despre ștergerea memoriei cache. În acest proces, am descoperit că următoarea linie a fost comentată în mine lazyBuilder() metoda (aceste elemente de meniu sunt în bara mea de instrumente și sunt generate în cod)

$manipulatori = [
  ['callable' => 'menu.default_tree_manipulators:checkAccess']
]

Absența acelor linii a făcut ca meniul meu să ignore verificările de acces, aparent. Anularea comentariilor a rezolvat problema. Mulțumiri.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.