Wie kann der Zugriff auf das Benutzerprofil zum Anzeigen und Bearbeiten am besten deaktiviert werden? Grundsätzlich können Benutzer ein Konto erstellen, jedoch nicht in der Lage sein, ihre eigenen oder die Profile anderer Benutzer zu bearbeiten oder anzuzeigen.
7
Da die Frage nicht spezifisch für Drupal 7 zu sein scheint, gehen Sie in Drupal 8 folgendermaßen vor: hook_menu_alter ist nicht mehr vorhanden. Jetzt verwenden Sie einen RouteSubscriber. Wie dies funktioniert, können Sie hier sehen: https://www.drupal.org/docs/8/api/routing-system/altering-existing-routes-and-adding-new-routes-based-on-dynamic-ones
Der RouteSubscriber würde folgendermaßen aussehen:
Die Routennamen stammen aus dem Kernbenutzermodul. In "setRequirement" können Sie alles tun, was Sie in der normalen Routenkonfiguration tun können. Beachten Sie, dass setRequirement eine Berechtigung (oder Rolle usw.) hinzufügt, die Anforderung ["_entity_access"] => "user.update" jedoch weiterhin Teil der Route ist.
Dann müssen Sie den Dienst in der Dienst-Yaml-Datei Ihres Moduls registrieren:
quelle
Anstatt ein Modul dafür zu erstellen, können Sie einfach eine Regel erstellen.
Hier ist eine Anleitung:
Schritt 1: Erstellen Sie eine Regel, die auf dieses Ereignis einwirkt: "Benutzerkontoseite wird angezeigt"
Schritt 2: Legen Sie eine Bedingung fest, etwa: "NICHT Benutzer hat Rolle (n) Parameter: Benutzer: [Konto], Rollen: Administrator"
Schritt 3: Erstellen Sie eine Aktion: "Seitenumleitung Parameter: URL: toboggan / verweigert" (falls Sie Login-Rodel verwenden, aber eine Seiten-URL hier funktionieren sollte, damit Sie eine Seite speziell für diese erstellen können, die etwa Folgendes sagt: "Wir sind Es tut mir sehr leid, aber im Moment können Sie nicht auf Ihre Profilseite zugreifen. "
Schritt 4: Aktivieren Sie diese Regel, wenn Sie beispielsweise die neueste Version Ihrer Produktionssite herunterladen, eine SQL-Sicherung herunterladen, lokal damit herumspielen und sie dann erneut hochladen möchten, ohne Benutzer zu enttäuschen, die möglicherweise aktualisieren möchten ihr Profil in der Zwischenzeit.
Darüber hinaus können Sie eine weitere Bedingung hinzufügen, um zu überprüfen, ob der Benutzer die Profilseite eines anderen Benutzers oder seine eigene anzeigt, sodass Sie zwei verschiedene Regeln festlegen, von denen eine Seite anzeigt, dass er sein Profil vorübergehend nicht aktualisieren kann, und eine andere Regel, die a anzeigt Seite, auf der angegeben ist, warum das Profil eines bestimmten Benutzers nicht angezeigt werden kann.
Ich habe dies getestet und diese Bedingung hinzugefügt: "Datenvergleich Parameter: Zu vergleichende Daten: [Konto], Datenwert: [Site: aktueller Benutzer]" Dadurch wird nur der Zugriff verweigert, um das eigene Konto anzuzeigen und dann das anzuzeigen Die richtige Seite, die Sie für diesen verweigerten Zugriff erstellt haben. Ich denke, das macht mehr Sinn.
quelle