Umgt - Role/Group

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Umgt - Role/Group

Beitrag von Screeze » 28.07.2011, 11:41:55

Ich weiß diese Frage kam schon öfters auf, aber ich komme trotzdem nicht mit der Unterscheidung von Role und Group klar.
Ich habe mir jetzt diverse Themen hier durchgelesen, und komme zu dem Schluss, dass du (Christian) das selbst nicht so ganz einheitlich machst???

Zitat: viewtopic.php?f=10&t=692&start=75#p7999
condition="group" options="Admins"
Hier hast du also für Administratoren eine Gruppe angelegt.

Anderer Thread, andere Verwendung:
Zitat: viewtopic.php?f=5&t=97&p=4703&hilit=role+admin#p4703
Gemäß ihren Aufgaben habe ich 2 Rollen angelegt, eine Rolle mit allen Funktionen für den Admin und eine Rolle mit den meisten Funktionen (ausser UMGT und ein paar andere Admin-Sachen) für die User 1 und 2.
Hier hast du nun eine Rolle für den Admin angelegt.

Und jetzt die 100$ Frage: Was jetzt: Rolle oder Gruppe???

Konkret geht es mir darum, dass ich in meinem CMS eine Möglichkeit brauche Administratoren von normalen Usern zu unterscheiden. Bisher ist jeder eingeloggte Nutzer Administrator. Da ich aber ermöglichen will innerhalb der Seiten des CMS noch weitere Anwendungen einzubinden, die evenutell Registrierungen vorraussetzen, muss ich hier eine Unterscheidung einbauen, und nicht nur Prüfen ob der Nutzer eingeloggt ist, sondern auch ob er Administrator ist.
Sollte ich jetzt Rolle oder Gruppe nehmen?
Nachteil den ich bei Rollen bereits gesehen habe: ich kann die nur anhand einer Id laden mit dem Umgt, während ich Gruppen auch mit dem Name ansprechen kann.


edit:
Außerdem vermisse ich die Möglichkeit per Taglib zu Prüfen ob ein Nutzer NICHT Mitglied einer Gruppe ist.

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Umgt - Role/Group

Beitrag von MrNiceGuy » 02.08.2011, 13:19:20

Ich persönlich halte die Unterscheidung zwischen Rollen und Gruppen ebenfalls für überflüssig, da EINE dieser beiden Möglichkeiten alle Gegebenheiten abdeckt. In Anlehnung an z.B. das Windows-Rechte-System würde es meiner Meinung nach reichen Gruppen anlegen zu können und diesen Gruppen DIREKT Berechtigungen zuzuweisen.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Umgt - Role/Group

Beitrag von Megger » 02.08.2011, 14:12:29

Ich habe Gruppen bisher immer nur als Designelement genommen, d.h. ich hatte z.B. eine Administratoren Gruppe mit verschiedenen Usern, die User allerdings hatten verschiedenen Rollen und dadurch ihre Berechtigung.

Ich finde das Rechtesystem von phpBB eigentlich ganz gut, da hat man die Auswahlmöglichkeit bei den Berechtigungen zwischen 'Ja', 'Nein' und 'Nie' und diese Berechtigungen kann man sowohl einem Benutzer als auch einer Gruppe zuweisen. Dadurch kann man eigentlich alles abbilden und vorallem benötigt man nicht direkt eine andere Rolle nur weil 1 User bei einer Berechtigung gesondert behandelt wird, sonst allerdings alle Berechtigungen der anderen User teilt!

Kleines Beispiel mit phpBB Berechtigungen:
Userrechte: Schreiben Nein, Lesen Ja, Admin Nein
Benutzergruppe: Schreiben Ja, Lesen Nein, Admin Nie
Admingruppe: Schreiben Ja, Lesen Ja, Admin Ja

Wenn der User in der Benutzergruppe ist, dann kann er Lesen und Schreiben, da 'Ja' eine höhere Priorität als 'Nein' hat.

Wenn der User in der Admingruppe ist, dann hat er zusätzlich zum Schreiben und Lesen auch noch die Adminrechte.

Wenn der User in der Admingruppe und der Benutzergruppe ist, dann kann er Lesen und Schreiben, hat allerdings keine Adminrechte, da 'Nie' die höchste Priorität hat und dadurch das 'Ja' aus der Admingruppe wieder überschreibt.

Das UserManagement ist zwar sehr flexibel und bietet alle Möglichkeiten, allerdings fehlen mir persönlich erklärende Beispiele oder soetwas. Ein Anfänger in Sachen APF muss schon eine gewaltige Hürde überspringen um das Usermanagement einzusetzen und auch damit zu arbeiten, hier wäre vielleicht eine klare Linie an Beispielen von Vorteil (also anstatt zu sagen 'du kannst es so machen oder so oder wenn du willst kannst du es auch ganz anders machen', sollte man vielleicht ein paar Beispiele bringen 'wenn du den zugriff auf eine Seite beschränken willst, dann erstellst du am Besten eine Rolle und entsprechende Berechtigungen...)
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Umgt - Role/Group

Beitrag von Screeze » 02.08.2011, 14:25:18

Ein Anfänger in Sachen APF muss schon eine gewaltige Hürde überspringen um das Usermanagement einzusetzen
Nicht nur APF-Anfänger, ich komme schließlich auch nicht damit klar, und nutze das nun schon ich glaube 2 Jahre intensiv....

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Umgt - Role/Group

Beitrag von ma2604121 » 02.08.2011, 14:30:35

(...) hier wäre vielleicht eine klare Linie an Beispielen von Vorteil (also anstatt zu sagen 'du kannst es so machen oder so oder wenn du willst kannst du es auch ganz anders machen', sollte man vielleicht ein paar Beispiele bringen 'wenn du den zugriff auf eine Seite beschränken willst, dann erstellst du am Besten eine Rolle und entsprechende Berechtigungen...)
Dem kann ich, als APF-Anfänger, auf jeden Fall zustimmen.

Mit der derzeitigen Doku hadere ich leider an vielen Stellen. Zumal die Beispiele sich des Öfteren auf ältere APF-Versionen beziehen und mit einer aktuellen APF-Version in der geschilderten Art und Weise nicht mehr umsetzbar sind.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Umgt - Role/Group

Beitrag von Megger » 02.08.2011, 14:32:30

Ich setze das Usermanagement auch einfach so ein wie ich mir denke, dass es passt, aber es fühlt sich an, als ob ich mir mit APF Mitteln mehrere "Umgehungen" in diese Hürde einbaue :D
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Coach83
Beiträge: 271
Registriert: 13.05.2010, 17:33:12
Kontaktdaten:

Re: Umgt - Role/Group

Beitrag von Coach83 » 02.08.2011, 19:51:03

ich hab es so gelöst, dass ich folgende Gruppen habe:
volle Mitglider, neue Mitglieder, Team, Kunden und zertifizierte Mitglieder

Rollen habe ich dann z.B. Artikel-Redakteure oder Forum-Moderatoren.
Diesen habe ich dann spezielle Berechtigungen vergeben.

Die Sichtbarkeiten habe ich nicht benutzt.. das hab ich net so ganz kapiert.

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Umgt - Role/Group

Beitrag von MrNiceGuy » 04.08.2011, 10:14:25

Es gibt viele Ansätze für gute und weniger gute Benutzer-/Rechteverwaltungen. Meines Erachtens nach sollte es folgende Möglichkeiten geben:

- Berechtigungsgruppen um mehrere Berechtigungen zusammenfassen zu können
- Gruppen mit Einzel-Berechtigungen und Berechtigungsgruppen
- Benutzer mit Einzel-Berechtigungen und Berechtigungsgruppen

Die Berechtigung ansich muss dann bei der Zuweisung festgelegt werden ("on/off"). Damit müsste man alle Möglichkeiten haben.

Allerdings wäre eine Hierarchie wie im phpBB eher nicht so praktisch, da würde ich die Hierarchie dann eher auf die Ebene Benutzer/Gruppen abbilden. Sprich: Wenn ein Benutzer eine Berechtigung direkt bekommt wird die Berechtigung der Gruppen überschrieben. Die Gruppen selber müssten dann auch eine Art Rangfolge bekommen, damit z.B. Benutzer in der Grupep "User" UND "Administrator" die Rechte der Admin-Gruppe die der Benutzer überschreiben.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Umgt - Role/Group

Beitrag von Megger » 04.08.2011, 10:57:57

Ja klingt vernünftig! Ich vermisse beim APF die Berechtigungen auf Benutzerebene, sodass ich jemanden die gleichen Rechte wie anderen geben kann (durch Rolle, Gruppe oder was auch immer) aber trotzdem die Möglichkeit habe diesem speziellen Benutzer eine bestimmte Berechtigung zu entziehen oder zusätzlich zu geben
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Umgt - Role/Group

Beitrag von dr.e. » 04.08.2011, 21:49:46

Ich gehe konform, dass einige Themen nicht ideal umgesetzt sind, nur möchte ich gerne bei Erweiterungen die Trennung zwischen Sichtbarkeits- und Funktions-Berechtigungen beibehalten. Das ermöglichst es uns das UMGT wirklich für beliebige Applikationen einzusetzen ohne konkrete Abhängigkeiten von der Applikation in das Modul zu generieren.

Sinnvoll sind auf jeden Fall Berechtigungen auf Benutzer und Gruppen zu vergeben. Auf Benutzer-Basis ist das heute hinsichtlich der Sichtbarkeits-Berechtigungen möglich. Diesen fehlt noch die Zuweisung zu einer Gruppe und die Gewichtung (Lesen, Schreiben, Löschen, ...).

Bei den Rollen und Permissions können wir beispielsweise das PermissionSet auch entfernen, dann lassen sich Berechtigungen auch direkt auf Benutzer vergeben.

Ich schlage vor, wir schreiben zusammen ein Proposal und bauen das in 1.15 um.
Viele Grüße,
Christian


Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Umgt - Role/Group

Beitrag von dr.e. » 04.08.2011, 21:58:33

Hier gilt die Regel:

Rolle=Funktion
Gruppe/Benutzer=Sichtbarkeit

Im CMS sehe ich die Unetrscheidung ganz klar auf Rollen-Basis, was du als Benutzer genau siehst, ist eine Sichtbarkeits-Berechtigungs-Angelegenheit. In meiner aktuellen CMS-Implementierung habe ich unterschiedliche Rollen, an die 1:1 die Menüs geknüpft sind, die der eingeloggte Benutzer sieht. Nehmen wir an, dein Benutzer ist "Redakteur", dann sieht er den Navi-Punkt "Seiten pflegen". Welche Seiten er dort aber pflegen darf entscheidet die Sichtbarkeitsberechtigungen. Das bedeutet: selbst wenn er eine Seite löschen darf, kann er Seiten, die er garnicht sehen darf (z.B. Footer, was eine "System-Einstellung" ist) eben nicht löschen, da sie nicht zu seinem "Aufgabengebiet" (=Rolle) zählen. Soweit verständlich?
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Umgt - Role/Group

Beitrag von Screeze » 04.08.2011, 22:20:05

Der letzte Satz ist zwar etwas unvollständig, aber ich denke ich habe es soweit verstanden, als dass ich damit arbeiten kann.
Ich nehm einfach nur die Rollen ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Umgt - Role/Group

Beitrag von dr.e. » 05.08.2011, 08:05:15

Sorry, hab' den Satz nun auch zu einem verständlicheren Ende geführt. :D Für deine Zwecke - sofern jeder jedes Objekt sehen soll - sind Rollen die richtige Wahl.

Wenn wir es nun schaffen, das Thema Rollen noch etwas schöner zu gestalten und Sichtbarkeitsberechtigungen intuitiver werden zu lassen (z.B. über Zuweisung zu Gruppen), dann sollten wir doch alle Anforderungen erfüllen. Richtig, Lutz?
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Umgt - Role/Group

Beitrag von Screeze » 05.08.2011, 10:53:04

Fehlt da nicht ein loadRoleByName() ? Oder sollen Rollen nur über die Id angesprochen werden?


und mein edit vom 1. Post ist auch noch offen
edit:
Außerdem vermisse ich die Möglichkeit per Taglib zu Prüfen ob ein Nutzer NICHT Mitglied einer Gruppe ist.
edit:
Ich wollte eine entsprechende Condition gerade für das APF bauen. Dazu habe ich die Condition "UmgtNotRoleCondition" angelegt:

Code: Alles auswählen

<?php

/**
 * <!--
 * This file is part of the adventure php framework (APF) published under
 * http://adventure-php-framework.org.
 *
 * The APF is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * The APF is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with the APF. If not, see http://www.gnu.org/licenses/lgpl-3.0.txt.
 * -->
 */
import('modules::usermanagement::pres::condition', 'UserDependentContentCondition');

/**
 * @package modules::usermanagement::pres::condition
 * @class UmgtGroupCondition
 *
 * Implements the decision logic, whether a user's role is *NOT* part of given options array.
 *
 * @author Ralf Schubert
 * @version
 * Version 0.1, 05.08.2011
 */
class UmgtNotRoleCondition extends UserDependentContentConditionBase implements UserDependentContentCondition {

   public function matches($conditionKey, GenericDomainObject $user = null) {

      if ($user === null) {
         return true;
      }

      foreach ($this->getRoles($user) as $role) {
         /* @var $role GenericDomainObject */
         if (in_array($role->getProperty('DisplayName'), $this->getOptions())) {
            return false;
         }
      }
      return true;
   }

   public function getConditionIdentifier() {
      return 'not-role';
   }

   private function getRoles(GenericDomainObject $user) {
      return $user->loadRelatedObjects('Role2User');
   }

}

?>
Außerdem habe ich diese im UserDependentContentConditionSet imported und am Ende der Datei hinzugefügt wie die anderen.
Als key habe ich "not-role" verwendet.

So funktioniert das aber nicht, ich konnte auch rausfinden weshalb:

Code: Alles auswählen

private function getCondition($conditionKey) {

      foreach ($this->conditions as $condition) {
         /* @var $condition UserDependentContentCondition */
         if (strpos($conditionKey, $condition->getConditionIdentifier()) !== false) {
            return $condition;
         }
      }

      throw new Exception('No condition found for key "' . $conditionKey . '".');
   } 
Warum wird hier strpos verwendet um die Condition zu finden? Denn Die Condition "role" wird vor "not-role" getestet, und da "role" in "not-role" vorkommt, wird die falsche Condition verwendet!

Option a: Wir ändern das auf einen Stringvergleich
Option b: Wir müssen aufpassen, dass die Conditions in einer bestimmten Reihenfolge hinzugefügt werden, was aber unflexibel ist.


P.s.: Erbitte Erlaubnis diese Condition ins SVN einchecken zu dürfen. (Habe vorerst einfach die Reihenfolge der Conditions geändert)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast