Node Privacy mittels User Relationship
am 02.02.2010 - 17:34 Uhr in
hi,
ich suche schon den ganzen Tag nach einer anständigen Lösung (hauptsächlich in der englischsprachigen Community) aber bislang konnte ich keine Hilfe finden. Ich hoffe, dass mir hier geholfen werden kann :).
Es geht um folgendes:
Ich möchte gerne Usern die Möglichkeit geben, die Privatsphäre Einstellung eigener Inhalte zu kontrollieren (so wie man es von StudiVZ & Co. her kennt). Man erstellt z.B. eine neue Bildergalerie und kann dann einstellen wer alles die Bilder sehen darf: Alle, Nur Freunde oder Keiner.
Mittels dem Modul "CCK Private Fields" habe ich eine solche Funktion für die Profilfelder erreichen können. Jedoch bezieht sich dieses Modul nur auf die einzelnen Eingabefelder und nicht auf ein gesamtes Content Type bzw. ein Node welches durch ein Content Type erstellt wird.
Z.B. wenn ich eine Bildergalerie erstelle habe ich keine Möglichkeit der gesamten Galerie zu sagen, dass die Bilder der Galerie nur für Freunde sichtbar sein sollen, nein, ich müsste dann die Eingabefelder aller Bilder konfigurieren (pro Bild gibt es Eingabefelder für Titel, Beschreibung und Imagefield für das eigentliche Bild). Mit diesem Modul ist mein Vorhaben also nicht machbar.
Freunde-Beziehungen erstelle ich mit dem User Relationship Modul (UR). Unter "admin/content/user_relationship_node_access" kann man auswählen, welcher Content Type später konfiguriert werden kann. Aber man erhählt etwas ganz "komisches". Als User hat man dann die Möglichkeit einzustellen, ob Freunde die eigenen Inhalte Sehe, Bearbeiten oder Löschen kann. Wozu man sowas nutzen kann ist mir nicht klar. Ich könnt als Admin die Punkte "Bearbeiten" und "Löschen" deaktivieren, so dass man nur noch "Sehen" einstellen kann aber das wurde auch etwas "komisch" gelöst.
Pro Relationship-Typ kann ich jetzt sagen, wer alles meine Inhalte sehen darf. Z.B. habe ich den Relationship-Typ "Friends". Nun kann ich sagen dass "Friends" den Inhalt XY sehen darf (die Optionen Bearbeiten und Löschen seien jetzt mal für den normalen User deaktiviert). Markiere ich den Punkt "Sehen" nicht, dann ist der Inhalt für Alle sichtbar. Setze ich den Hacken bei "Sehen für Friends" dann können nur Freunde den Inhalt sehen. Gut, und was ist mit "Keiner soll den Inhalt sehen können"?! Diese Option gibt es einfach nicht, wieso auch immer?!
Ich könnte jetzt einen weiteren Relationship-Typ namens "Keiner" erstellen und diesem Typ anstelle von "Friends" die Option "Sehen" zuweisen aber das ist absolut keine optimale Lösung.
Eine wirklich grundlegende Funktion für Community-Seiten gibt es irgendwie nicht (ich habe es nicht gefunden).
Kann mir einer verraten wie ich so eine Funktion hinbekomme?
Vielen Dank schon mal.
Gruß.
- Anmelden oder Registrieren um Kommentare zu schreiben
Kann hier kener was zu
am 04.02.2010 - 20:29 Uhr
Kann hier kener was zu meinem Problem sagen? Hat sowas noch keiner umgesetzt?
offene Anfrage
am 17.12.2010 - 12:20 Uhr
Hallo Martin,
Hallo DrupalanerInnen,
auch ich "hänge" mit einem Forumsbeitrag an der gleichen Fragestellung:
Erweiterung bei der Erstellung Inhaltstypen durch die Comminity-Mitglieder: Sichtbarkeit des Inhalts soll als privat, für Freunde und innerhalb der Community wählbar sein
http://www.drupalcenter.de/node/31924
Hast Du (Martin) schon eine Lösung gefunden oder wer schreibt mal einen ausführlichen Lösungsweg. Ich habe zu wenig Drupalkenntnisse, weiss nur das die Problematik darin besteht, dass Beiträge für Freunde ja nicht rollenbasiert sind insofern, weil ja jeder Nutzer andere relationsships hat.
Bin gespannt auf die Resonanz.
Danke im voraus
Hi, ich hab mittlerweile
am 18.12.2010 - 23:50 Uhr
Hi,
ich hab mittlerweile meine eigene Lösung programmiert (welche auch recht gut funktioniert). Es ist aber keine "Ein-Modul-Lösung". Ich kann dir nicht erklären wie ich es gemacht habe (wäre zu aufwändig). Das Modul kann ich leider auch nicht "rausrücken". Ich kann aber ein paar Stichpunkte zu meiner Lösung verraten:
Dreh- und Angelpunkt ist die Datenbanktabelle "node_access". In dieser wird beim Speichern/Bearbeiten eines Nodes festgelegt, wer welche Berechtigungen für ein Node hat (Sehen, Bearbeiten, Lschen).
Mein Ansatz war also, Benutzern je nach Beziehungsstatus zu mir entsprechende Rechte durch EInträge in der Tabelle "node_access" zu geben.
Es hat lange Zeit gebraucht, bis ich dahintergestiege bin, wie Drupal die Zugriffsrechte auf Nodes verwaltet (das war schon ein Brocken!).
Ich habe mir also ein Modul geschrieben, das mir ein Formular generiert. In diesesm Formular kann ich nun je Content Type einstellen, wer was zu sehen bekommt. Z.b Blogartikel, Bildergalerien, Videos, Umfragen, etc (Bildergalerien sind etwas gemein, weil du nicht nur einen Node hast, sondern alle Bilder-Nodes des jeweiligen Galerie-Nodes mit einbeziehen must).
Das Modul legt auch eine neue Datenbanktabelle mit den Feldern "User ID", "Content Type", "Status" wobei Status Werte von 0 bis 2 für "Alle", "Nur Freunde", "Keiner" speichert. Außerdem gibt es noch ein Feld "Permission", welches ein serialisiertes Array ablegt (siehe PHP serialize bzw. unserialize).
Beim Erstellen eines neuen Nodes oder beim Editieren eines bestehenden Nodes wird Drupal durch einen Hook (in menem Fall hook_nodeapi) dazu gebracht die Tabelle meines Moduls mit einzubeziehen und entsprechende Einträge in der Tabelle node_access vorzunehmen.
In der Tabelle node_access wird mir "realms" gearbeitet. Das kann ich dir jetzt ncht so erklären, am besten du suchst d aanach. Du kannst dir auch andere Module wie "Organic Groups" zum Testen einrichten und schauen was so alles in der Tabelle durch OG gespeichert wird.
Ich hoffe ich konnte dir ein paar brauchbare Tipps geben.
Bei Drupal muss man einfach ganz viel lesen und ausprobieren. Ich habe bestimmt 15 Testinstallationen hinter mir: jede um ein spezielles Problem zu anaysieren und rumtesten zu können ohne meine eigentliche Plattform vermutlich zu zerschießen (is mir mit den Testinstallationen oft genug passiert ;)).
Ich persönlich hab relativ früh aufgegeben in Foren wie diesem hier nach Antworten zu suchen. Ich bin Software Entwickler und mache meine eigenen Lösungen. Die Drupal API ist auch eine meiner ersten Anlaufstellen, wenn ich verstehen möchte, was genau abläuft.
Viel Erfolg weitehrin!
Also Martin - diese Lösung
am 19.12.2010 - 00:09 Uhr
Also Martin - diese Lösung könntest Du der Community ruhig irgendwann einmal als Modul-Version zur Verfügung stellen.
Ich würde hier - als Dank - auch einen "Martin-Gebets-Schrein" aufstellen an dem ich Dir täglich Opfergaben erbringe ;-)
Schöne Grüße
Matthias
Drupal rockt!!!
Wie schon erwähnt, es ist
am 19.12.2010 - 00:33 Uhr
Wie schon erwähnt, es ist keine "Ein-Modul-Lösung". Man muss an mehreren Schrauben "drehen". Z.B. habe ich auch eine Erweiterung für das Panels Modul programmieren müssen, damit die Sichtbarkeit ganzer Seiten durch mein Privatsphäre-Modul steuern kann. Wiederum habe ich in mehreren Template Dateien (tpl.php Dateien) Datenbank-Abfragen gemacht, welche dann die Tabelle meines Moduls auslesen und dementsprechend Daten anzeigen oder verbergen.
Man muss sich etwas anstrengen, dann kriegt man das auch selber hin. Wenn ich meine Module der Community einfach bereitstellen würde, dann könnte keiner was damt anfangen, da die Lösung speziell für ein Projekt konzipiert wurde. Die Zeit, ein umfangreiches und allgemeingültiges Modul zu schreiben habe ich leider nicht (ich mache das nicht als kleiner Privat-Hobby-Programmierer sondern professionell).
Sorry, aber da musst du dich durchbeisen. Wenn du programmieren kannst ist das eigentlich keine Große Sache. Man muss nur mal die Zusammenhänge und die Vorgehensweise von Drupal verstehen (was ich oben versucht habe etwas zu erläutern). Schnapp die die Stichpunkte aus meinem vorherigen Kommentar und geh auf Suche, dann wirst du ganz sicher fündig.
Gruß.
nodeaccess
am 19.12.2010 - 00:53 Uhr
Hallo.
Ich meine neulich gelesen zu haben, dass [do:nodeaccess Node Access] mittlerweile auch die Möglichkeit bietet, über userreference-Felder die Berechtigungen für Inhaltstypen einzelnen Benutzern zu geben.
Der Inhaltstyp kann also ein userreference-Feld für beispielsweise "Gebietsleiter" enthalten. Und darüber kann man dann steuern, welche Benutzer (also nicht nur wie früher, welche Rolle) die Inhalte sehen sollen.
Eventuell ist das ja schon das, was Du haben wolltest.
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Viele Hausaufgaben und tiefere Einarbeitung in php und mysql ...
am 19.12.2010 - 00:59 Uhr
Danke Martin für Deine Hinweise, wie man das Problem angehen kann. Ich komme wohl nicht umhin, mich tiefer in die Materie einzuarbeiten einschl. Drupal API, php und mysql. Ich kann mich der Meinung von noob nur anschließen und Dich ermutigen, Dein Modul der Commuity zur Verfügung zu stellen. Nichts für ungut: Deine Hinweise sind sehr brauchbar und die Möglichkeit, selbst Hand anzulegen ein Modul zu schreiben, erfordert natürlich Programmierkenntisse und Du hast davon Gebrauch gemacht. Da habe ich von meiner Seite noch ordentlich Hausaufgaben vor mir zumal ich bei der thematischen Realisation dieses threads nach passenden bestehenden Modulen ebenfalls nicht fündig geworden bin.
stBorchert schrieb Hallo. Ich
am 19.12.2010 - 01:28 Uhr
Hallo.
Ich meine neulich gelesen zu haben, dass [do:nodeaccess Node Access] mittlerweile auch die Möglichkeit bietet, über userreference-Felder die Berechtigungen für Inhaltstypen einzelnen Benutzern zu geben.
Der Inhaltstyp kann also ein userreference-Feld für beispielsweise "Gebietsleiter" enthalten. Und darüber kann man dann steuern, welche Benutzer (also nicht nur wie früher, welche Rolle) die Inhalte sehen sollen.
Eventuell ist das ja schon das, was Du haben wolltest.
Stefan
Soweit ich weiß arbeitet das Node Access Modul auf Node-Ebene. D.h, du erstellst ein Node und kannst dann speziell für dieses Node die Berechitungen anpassen. Das ist für Community-Portale wie StudiVz oder Facebook aber nicht wirklich sinnvoll. Sagen wir du hast 10 Bildergalerien und 50 Bilder in jede Galerie hochgeladen. Nun willst du die Privatsphäre-Einstellungen für deine Galerien anpassen. Im schlimmsten Fall musst du 500 Nodes anpassen! Nicht wirklich praktikabel, stimmts? ;)
Mein Modul löst genau dieses Problem. Wie schon erwähnt erstellt mein Modul ein Formular, wo man pro Content Type die Sichtbarkeitseinstellung anpassen kann (das Formular ist logischerweise nur für den aktuell angemeldeten Benutzer sichtbar). Wenn man nun das Formular speichert werden automatisch alle Nodes eines Content Types des aktuellen Benutzers gesammelt und die Einträge in der node_access Tabelle für jedes Node angepasst.
Vielleicht werde ich meine Lösung irgendwann veröffentlichen, das wird aber nicht in naher Zukunft passieren (wenn überhaupt). Mir fehlt einfach die Zeit, mein Modul so aufzubereiten, dass man es sich einfach herunterladen kann und dann ins eigene Projekt integrieren kann. Es ist eine Spezialanfertigung für ein spezielles Projekt.
Es ist wirklich Schade, dass Drupal von Haus aus so etwas nicht anbietet (gerade weil so gut für Community-Portale geeignet ist). Die grundlegenden Funktionen sind in der API vorhanden, man muss den Zugriff darauf aber selber umsetzen.
nodeaccess & co.
am 19.12.2010 - 10:55 Uhr
Hallo.
Ich habs gerade nochmal ausprobiert: die Berechtigungen lassen sich leider nur direkt pro Node setzen (dafür jetzt aber per userreference auch direkt für einzelne Benutzer).
Sagen wir du hast 10 Bildergalerien und 50 Bilder in jede Galerie hochgeladen. Nun willst du die Privatsphäre-Einstellungen für deine Galerien anpassen. Im schlimmsten Fall musst du 500 Nodes anpassen! Nicht wirklich praktikabel, stimmts? ;)
Ja, das wäre ungünstig.
Allerdings kann man über [do:nodeaccess Node Access] in Verbindung mit [do:nodeaccess_userreference Node Access Userreference] und [do:nodeaccess_nodereference Node Access Nodereference] Folgendes machen:
Man stellt die Berechtigungen für den Galerienode auf Rollen-/Benutzerbasis ein. Da die einzelnen Bilder eine Nodereference zur Galerie haben, vererben sich die gerade bei der Galerie gesetzten Berechtigungen auch auf die Bilder (das macht [do:nodeaccess_nodereference Node Access Nodereference]).
Das funktioniert wunderbar. Ideal wäre jetzt noch, wenn man die Berechtigungen für die referenzierten Nodes extra setzen könnte, so dass die Galerie von Benutzer X nicht bearbeitet werden kann, jedoch alle referenzierten Bilder. Das ist jedoch über ein kleines Zusatzmodul leicht machbar.
Es ist eine Spezialanfertigung für ein spezielles Projekt.
Das kenn ich :) Da bastelt man für ein Projekt eine Lösung, die dann jedoch so speziell ist, dass man sie komplett neu schreiben müsste.
Es ist wirklich Schade, dass Drupal von Haus aus so etwas nicht anbietet (gerade weil so gut für Community-Portale geeignet ist).
Naja, da (schätze ich mal) weniger als 1% aller Drupal-Nutzer diese Funktionalität benötigen, würde das den Core nur unnötig aufblähen. Der Core soll ja nur das Grundgerüst bieten, auf dem man dann aufbauen kann.
schöne Grüße,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hi und hallo, dieser Thread
am 16.08.2011 - 08:19 Uhr
Hi und hallo,
dieser Thread ist zwar schon ein bisschen älter, aber ich versuche auch noch mal hier mein Glück.
Ich möchte gerne etwas ähnliches erreichen, allerdings sogar auf Field-Basis.
Ich brauche so etwas wie die Privatsphäreeinstellungen wie z.B. bei Facebook.
Jeder Benutzer soll, wenn er angelegt wird (meine Benutzer werden alle von mir registriert), bestimmte Felder seines Profils öffentlich, nur für Mitglieder und versteckt sichtbar haben.
Der Benutzer kann dann selbst entscheiden (in seinem Profil mit z.B. einer Dropdown-Liste neben seinen Felder Telefon, E-Mail, Beziehungsstatus etc.) wie die einzelnen Felder für die Allgemeinheit sichtbar sein sollen.
Leider habe ich bis jetzt schon viele Leute gefragt und keiner hatte eine richtige Lösung parat oder konnte mir sagen wie nd wo genau ich ansetzen könnte.
Vielleicht weiß jemand etwas?
Vielen Dank schonmal für jeden Ansatz
Hier wurde Dir die Frage doch
am 16.08.2011 - 08:27 Uhr
Hier wurde Dir die Frage doch schon beantwortet?
http://www.drupalcenter.de/node/36865
Drupal rockt!!!
Ionit schrieb Hier wurde Dir
am 16.08.2011 - 09:04 Uhr
Hier wurde Dir die Frage doch schon beantwortet?
http://www.drupalcenter.de/node/36865
Das ist richtig, aber das ist ein arger Aufwand und ich dachte, so wie es in diesem Thread aussah, dass es evtl. schon eine fertige Modullösung gibt und hier jemand eines kennt.
Ich müsste ja bei jedem neu hinzukommenden Feld mit der manuellen Lösung wieder in den Code und danach alles testen. Das macht mich noch nicht so glücklick.
Ein fertiges Modul gibt es
am 16.08.2011 - 09:19 Uhr
Ein fertiges Modul gibt es dazu nicht.
Da es ja auch nahezu unendlich viele individuelle Anforderungen an eine "Sichtbarkeitssteuerung" gibt, wird es so etwas auch in Zukunft nicht von "der Stange" geben.
Und so schwer/aufwändig ist das mit den Checkboxen + IF-Anweisung auch nicht.
Mach das einfach mal für ein Feld fertig - danach kannste den Code einfach nur per Copy/Paste kopieren und die Feldnamen abändern - fertig.
Und das Gute ist - man lernt eine Menge dabei.
Drupal rockt!!!
Ionit schrieb Ein fertiges
am 16.08.2011 - 09:21 Uhr
Ein fertiges Modul gibt es dazu nicht.
Da es ja auch nahezu unendlich viele individuelle Anforderungen an eine "Sichtbarkeitssteuerung" gibt, wird es so etwas auch in Zukunft nicht von "der Stange" geben.
Und so schwer/aufwändig ist das mit den Checkboxen + IF-Anweisung auch nicht.
Mach das einfach mal für ein Feld fertig - danach kannste den Code einfach nur per Copy/Paste kopieren und die Feldnamen abändern - fertig.
Und das Gute ist - man lernt eine Menge dabei.
Alles klar. Vielen Dank für die Ermutigung, das hat mich überzeugt.
Dann hau ich mich mal rein ;)
Hier hatte ich mal eine
am 16.08.2011 - 09:29 Uhr
Hier hatte ich mal eine Anleitung geschrieben wie man soetwas (in Zusammenhang mit "User Relationship" + "Views" macht)
Das ist zwar etwas anders als Deine Anforderung aber die Lösung für Dein Problem könnte man durchaus aus diesem Code ableiten. Beschäftige Dich damit einfach mal!
http://www.drupalcenter.de/node/34030#comment-121663
Drupal rockt!!!