Wie kann ein Benutzer nur auf einen bestimmten Knoten und nicht auf alle Knoten dieses Typs zugreifen?

10

Ich habe einen Benutzer mit Ansichts- und Bearbeitungsrechten für einen bestimmten Inhaltstyp. Dies gibt allen Benutzern die Berechtigung, alle Knoten dieses Typs anzuzeigen und zu bearbeiten. Eigentlich möchte ich für jeden Benutzer einen eindeutigen Knoten erstellen, damit nur dieser Benutzer ihn anzeigen und bearbeiten kann. Wie kann ich das in Drupal 7 machen?

Ek Kosmos
quelle
1
Meinen Sie damit, wie Sie dies mit einem Modul tun können oder wie Sie den erforderlichen Code schreiben können?
Kiamlaluno
Eine andere Möglichkeit besteht darin, den Knoten abzulehnen und das Benutzerprofil um Felder zu erweitern.
ya.teck
Es hört sich so an, als ob dieser Knoten pro Benutzer eine Benutzerprofilanforderung erfüllen könnte. Muss es ein separater Knoten sein, oder wäre es nicht besser, die Benutzerentität selbst um zusätzliche Felder zu erweitern?
Alfred Armstrong
Drupal 7 hat die Berechtigungen für die Knotenansicht pro Benutzer entfernt. Sie können sie mit diesem Modul zurückbringen drupal.org/project/node_view_permissions
giorgio79
Verwenden Sie das Modul "nodeaccess" Link ist drupal.org/project/nodeaccess Ich wünschte, es wird Ihnen helfen
Mahipal Purohit

Antworten:

11

Mit einem vorhandenen Modul können Sie dies mit Content Access tun, mit dem (zusammen mit ACL ) die Berechtigungen für den Zugriff auf einen Knoten für jeden Benutzer festgelegt werden können.
Dies bedeutet, dass Sie die Zugriffsberechtigungen für jeden Knoten manuell festlegen müssen.

Wenn Sie die Knoten manuell erstellen und dann sicherstellen möchten, dass nur der Benutzer, der als Eigentümer des Knotens festgelegt ist, ihn anzeigen (und bearbeiten) kann, können Sie ein benutzerdefiniertes Modul erstellen (dh ein Modul) verwendet für Ihre Site) und implementieren Sie hook_node_access()wie folgt (der Code wurde geschrieben, um das Lesen zu erleichtern):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Mit dieser Hook-Implementierung müssen Sie die Zugriffsberechtigungen für jeden Knoten des von Ihnen erstellten Inhaltstyps nicht manuell bearbeiten. Das Ändern des Besitzers des Knotens wäre auch einfacher, da Sie die Zugriffsberechtigungen dieses Knotens nicht ändern müssen. Der Code gewährt dem Benutzer, der als Eigentümer (oder Autor) des Knotens festgelegt ist, automatisch die Aktualisierungs- und Ansichtsberechtigungen.

kiamlaluno
quelle
5

Sie benötigen dazu kein spezielles Modul oder benutzerdefinierten Code. Erstellen Sie einfach manuell diese Knoten, legen Sie die entsprechenden Benutzer als Eigentümer (Autor) der Knoten fest und legen Sie die Berechtigungen für diesen Inhaltstyp fest, um nur den eigenen Inhalt zu bearbeiten (keine Inhalte dieses Typs zu bearbeiten), und fertig.

Petr Svehla
quelle
1

Sie sprechen von der Drupal-Knotenzugriffskontrolle, die ein großes Thema ist.

Die integrierte Unterstützung des Kerns für die Knotenzugriffskontrolle ist eher selbstverständlich. Um den Zugriff zu steuern und einen Knoten nach Rollen anzuzeigen, müssen Sie eine Art Knotenzugriffskontrollmodul verwenden. Auf Drupal.org gibt es eine Seite, auf der alle Knotenzugriffsmodule mit einer Kapselüberprüfung aufgeführt sind. Ich schlage vor, dass Sie sich diese Seite ansehen, um zu sehen, ob Sie ein geeignetes Modul zur Zugriffssteuerung finden.

Das Flexi Access- Modul scheint das Modul zu sein, das Ihren Anforderungen am ehesten entspricht, da seine Hauptfunktion darin besteht, den Zugriff für einzelne Benutzer zu steuern, anstatt nach Rolle oder Taxonomiebegriff.

Es ist ein kleines Modul, mit dem Sie ACLs (Zugriffssteuerungslisten) für einzelne Benutzer einrichten können. Es handelt sich im Grunde genommen um eine Benutzeroberfläche für das ACL- Modul, daher müssen Sie diese ebenfalls installieren.

Es fehlen einige der Funktionen der erweiterten Zugriffssteuerungsmodule, z. B. Content Access , aber es wird aktiv gewartet und es gibt derzeit keine offenen Fehler in der Problemwarteschlange.

Offenlegung: Ich bin der Betreuer von Flexi Access.

Freie Radikale
quelle