Hallo Zusammen,
ich würde gerne für eine bestimmte Rolle die ich angelegt habe, einige Buttons (z.B Create a new Group)unsichtbar machen. Ist das möglich? Ich weis, dass man mit dem folgendem Code den Zugriff auf die Seite verhindern kann.
groups/add/{$self_guid}' => array('rule' => 'deny')
Jedoch kann das für den Nutzer frustrierend sein ein Button zu sehen, das nicht tut was es 'verspricht'...
info@elgg.org
Security issues should be reported to security@elgg.org!
©2014 the Elgg Foundation
Elgg is a registered trademark of Thematic Networks.
Cover image by Raül Utrera is used under Creative Commons license.
Icons by Flaticon and FontAwesome.
Hi, ich habe mein Problem auch in der Gruppe Beginning Developers angesprochen. Ich hoffe das ist nicht schlimm...
Die Sache sieht wie folgt aus. Undzwar hat das Ganze für die beiden Buttons "Create a new group" and "Add page" funktioniert:
'Student' => array(
'title' => 'Student',
'extends' => array(),
'permissions' => array(
'actions' => array(
'groups/edit' => array('rule' => 'deny'),
'pages/edit' => array('rule' => 'deny')
),
'pages' => array(
'groups/add/{$self_guid}' => array('rule' => 'deny'),
'pages/add/{$self_guid}' => array('rule' => 'deny'),
),
'menus' => array(
'title::add' => array(
'rule' => 'deny',
'context' => array('groups', 'pages')
),
'page::groups:owned' => array(
'rule' => 'deny',
'context' => array('groups')
),
),
),
Jedoch sollen die Buttons für
Groups:
- 'groups:join' => 'Join group'
- 'groups:joinrequest' => 'Request membership'
Events (plugin):
- 'event_manager:menu:new_event' => 'New event'
auch versteckt werden...Ich habs wie folgt versucht (mag blöd sein)
- 'title::join' => array('rule' => 'deny'),
- 'page::groups::title::join' => array('rule' => 'deny'),
und es hat nicht funktioniert... Hast du vllt. eine Idee wie mans machen kann?
Funktioniert
'menus' => array(
'title::groups:join' => array(
'rule' => 'deny',
'context' => array('groups')
),
und ensprechend beispielsweise 'title::groups:joinrequest'? Den doppelten Doppelpunkt gibt es nur nach dem Namen des Menus (site / page / title). Der einfache Doppelpunkt dahinter (z.B. bei groups:join) kommt dann aus dem Namen des Menupunktes ('groups:join') wie er im Sprachfile des groups-Plugins definiert ist.
Vielleicht tut auch
'menus' => array(
'title::join' => array(
'rule' => 'deny',
'context' => array('groups')
),
falls Du bei Deinem Versuch die 'context'-Zeile nicht drin hattest. Ich bin etwas unschlüssig wie genau sich das roles-Plugin das genau zusammenreimt. Ich hätte beispielsweise erwartet, dass
'menus' => array(
'title::groups:add' => array(
'rule' => 'deny',
'context' => array('groups', 'pages')
),
notwendig wäre. Allerdings gibt es zwischen dem "Add"- und beispielweise dem "Join"-Button auch einen Unterschied. Der Add-Button verlinkt auf die Seite http://seiten.domain/groups/add während der Join-Button auf eine Action (http://seiten.domain/action/groups/join) verlinkt. Es kann auch sein, dass das roles-Plugin deshalb den Join-Button nicht unterdrücken kann.
Wenn Du es einmal herausgefunden hast, sollte es bei den anderen Buttons (auch beim Events-Plugin) entsprechend gehen. Du mußt dann halt vielleicht im Sprachfile des Plugins schauen, wie der Sprachtag des entsprechenden Menupunktes lautet.
super super super :) hab alle drei auf einmal eingefügt und eins davon hat anscheinend funktioniert :) ich schau welche zeilen zum erfolg geführt haben ...danke dir
'menus' => array(
'title::groups:join' => array(
'rule' => 'deny',
'context' => array('groups')
),
war das richtige :) habs auch für 'Join Request' hinbekommen
Bei Button 'New event' ('event_manager:menu:new_event') funktioniert es i.wie nicht.
Als context kommen folgende zur Auswahl (habe alle probiert):
'event_manager:menu:title' => 'Events', <--- müsste doch der hier sein oder?
'item:object:event' => 'Events',
'event_manager:list:title' => 'Events',
'event_manager' => 'Event Manager',
Mein Code:
'title::event_manager:menu:new_event' => array(
'rule' => 'deny',
'context' => array('event_manager:menu:title')
),
hat aber nicht funktioniert...
Probier mal, ob es bei dem Event-Manager-Button auch ohne Angabe eines Kontexts funktioniert. Wenn Du Glück hast, ist die Angabe eines Kontexts nicht zwingend erforderlich (im Umkehrschluss funktioniert es sicherlich nicht, wenn der angegebene Kontext falsch ist). Auch bei den anderen Buttons kannst Du ja jetzt mal versuchen, ob die Angabe des Kontexts notwendig ist.
Beim "Add"-Button ist die Angabe des Kontexts sicherlich notwendig, da der Kontext definiert, welche "Add"-Buttons genau nicht angezeigt werden sollen.
Beim Events-Plugin ist der Kontext wahrscheinlich "events" oder "event". Die Möglichkeiten, die Du aufgezählt hast, sind mit Sicherheit alle falsch. Den Kontext kannst Du nicht aus dem Sprachfile erschließen. Aber wie gesagt, probier es erst einmal ohne Angabe eines Kontexts, also
'menus' => array(
'title::event_manager:menu:new_event' => array(
'rule' => 'deny'
),
Also ich habs bei dem join button ohne kontext versucht und es hat funktioniert. beim event-plugin aber nicht...hab auch 'event', 'events' und 'all_events' as context versucht...
kann 'title::event_manager:menu:new_event' falsch sein? ich kann mir das anders nicht erklären...
hallo nochmal. habe nun das folgende Problem. Die Links Add bookmark, Add task,... in einer bestimmten Gruppe habe ich mit deiner Anleitung versteckt. Wenn ich nun auf 'View all' (z.B. bookmark)oder auf der Sidebar auf 'Group bookmarks' klicke, komme ich auf auf eine Seite wo ein Button ist (Add bookmark), mit der ich als Student neue bookmarks erstellen kann...
ich habe folgendes in meinem student roles plugin versucht aber es hat nicht funktioniert...:
'title::groups:bookmarks:add' => array(
'rule' => 'deny'
hast du eine idee was richtig wäre ? oder wie ich es anders lösen könnte (ohne im roles plugin etw. zu ändern) ?
Vielleicht (zusätzliche Regel):
'title::bookmarks:add' => array(
'rule' => 'deny',
'context' => array('groups')
),
Jetzt bin ich dran ;) ich hab mir den Code von dir mal geklaut alpik und versuche ihn gerade zu erweitern :)
nur leider klappt das ganze noch nicht so wie ich will, ich möchte jetzt den Button Add/Schreiben/hinzufügen bei "thewire" für default member entfernen. Doch habe ich jetzt schon alle Begriffe ausprobiert... (add/mts/submit) leider hat es bisher noch nicht funktioniert. Hast du evtl. noch eine Idee iionly was man einsetzten könnte? Hier mein Code:
DEFAULT_ROLE => array(
'title' => 'roles:role:DEFAULT_ROLE',
'extends' => array(),
'permissions' => array(
'actions' => array(
'groups/edit' => array('rule' => 'deny'),
'pages/edit' => array('rule' => 'deny'),
'thewire/edit' => array('rule' => 'deny'),
),
'pages' => array(
'groups/add/{$self_guid}' => array('rule' => 'deny'),
'pages/add/{$self_guid}' => array('rule' => 'deny'),
'thewire/add/{$self_guid}' => array('rule' => 'deny'),
),
'menus' => array(
'title::groups:join' => array(
'rule' => 'deny',
'context' => array('groups')
),
'page::groups:owned' => array(
'rule' => 'deny',
'context' => array('groups')
),
'page::thewire:add' => array(
'rule' => 'deny',
'context' => array('groups')
),
),
),
Willst Du den Mitglieders einer bestimmten Rolle nur das Erstellen von Wire-Postings verbieten oder sollen diese überhaupt keinen Zugriff auf die Wire-Seiten haben?
Ich denke nicht, dass der Ansatz über die Rollendefinition im Roles-Plugin für das Wire-Plugin in beiden Fällen funktionieren wird bzw. selbst wenn er funktioniert sinnvoll ist. Das Eingabe/Submit-Feld für Wire-Postings ist ja in der Wire-Seite integriert. Daher müßtest Du wohl eher den Code des Wire-Plugin dahingehend modifizieren, dass das Eingabefeld nur für User angezeigt bekommen, die einer bestimmten Rolle angehören. Du mußt im Code des Wire-Plugins suchen, wo/wie genau dieses Eingabefeld hinzugefügt wird und dann diesen Teil des Codes in einer if-Abfrage kapseln, die die Rolle prüft, die der eingeloggte User hat. In einem der alpik-Postings müßte stehen, wie die if-Bedingung sinngemäß lautet. Er war beispielsweise auch nötig, um auf Gruppenseiten bestimmte Links auszublenden.
Wenn das ganze Wire-Plugin für bestimmte User "unsichtbar" sein soll, kann man das wahrscheinlich dadurch erreichen, dass man in start.php des Wire-Plugins die Zeile
elgg_register_event_handler('init', 'system', 'thewire_init');
in einer if-Bedingung kapselt, die die Rolle prüft. Hab das zwar noch nie gemacht aber ich denke das könnte funktionieren.
- Previous
- 1
- 2
- 3
- Next
You must log in to post replies.