permissions.xml
Mit der permissions.xml können Sie in QUIQQER eigene Zugriffsrechte anlegen und definieren. Diese Zugriffsrechte können Sie dann in Ihrem Plugin / Paket abfragen.
Das Anlegen geht denkbar einfach; legen Sie in Ihr Plugin / Paket eine permissions.xml an und definieren Sie hier Ihre Zugriffsrechte. Bei einem Update oder bei der Installation wird diese permissions.xml automatisch von QUIQQER eingelesen.
Beispiel einer permissions.xml
<permissions>
<!-- standard quiqqer permissions -->
<permission name="quiqqer.admin" type="bool">
<defaultvalue>1</defaultvalue>
<rootPermission>1</rootPermission>
<everyonePermission>0</everyonePermission>
</permission>
<permission name="quiqqer.su" type="bool">
<defaultvalue>1</defaultvalue>
</permission>
<permission name="quiqqer.system.update" type="bool" />
<permission name="quiqqer.system.permissions" type="bool" />
<permission name="quiqqer.system.cache" type="bool" />
<permission name="quiqqer.admin.groups.view" type="bool" />
<permission name="quiqqer.admin.groups.edit" type="bool" />
<permission name="quiqqer.admin.users.view" type="bool" />
<permission name="quiqqer.admin.users.edit" type="bool" />
<permission name="quiqqer.site.view" type="users_and_groups" area="site" />
</permissions>
Aufbau einer permissions.xml
<permissions>
- beginnt die permissions.xml
<permission>
- definiert ein Zugriffsrecht
<permission>
Ein <permission>
legt ein Zugriffsrecht fest, es bestimmt die Eigenschaften und die Art des Zugriffsrechts.
Attribut
-
name
: legt den Namen des Zugriffsrechtes fest. -
type
: legt den Typ des Zugriffsrechtes fest. (Mehr untertype
) -
area
: legt den Geltungsbereich des Zugriffsrechtes fest.
Values
Sie können für das Permission schon vorkonfigurierte Werte festlegen.
<defaultvalue>1</defaultvalue>
<rootPermission>1</rootPermission>
<everyonePermission>0</everyonePermission>
-
defaultvalue
: Gilt für alle Gruppen -
rootPermission
: Gilt nur für die root Gruppe -
everyonePermission
: Gilt nur für die Everyone Gruppe
rootPermission
und everyonePermission
sind optional. Wenn beide nicht gesetzt sind, wird immer auf das defaultvalue
zurückgegriffen.
**WICHTIG**
Der Permission-Name darf nicht länger als 100 Zeichen lang sein.
type="" (Mit welchen Werten kann das Recht befüllt werden?)
Mit dem type Attribut können Sie festlegen welchen Typ das Zugriffsrecht besitzt, das heißt welche Werte für dieses Recht zugelassen sind. Es gibt verschiedene Typen, die Sie zur Auswahl haben.
- bool - lässt nur true, false, 0 und 1 zu
- string - lässt jeden String zu
- int - lässt nur Ganzzahlen zu
- array - lässt ein Array zu, dieses Array wird in JSON Notation gespeichert
- group - lässt nur eine Gruppen-ID zu
- groups - lässt mehrere Gruppen-IDs zu
- user - lässt nur eine User-ID zu (wird meistens für Seiten
[area=site]
oder Projekte[area=project]
verwendet) - users - lässt mehrere User-IDs zu (wird meistens für Seiten
[area=site]
oder Projekte[area=project]
verwendet) - users_and_groups lässt Gruppen-IDs und User-IDs zu (wird meistens für Seiten
[area=site]
oder Projekte[area=project]
verwendet)
area="" (Wer kann das Recht haben?)
Das area Attribut legt fest in welchem Geltungsbereich das Zugriffsrecht liegt. In QUIQQER gibt es verschiedene Geltungsbereiche, ein Zugriffsrecht für eine Seite ist nicht gleich das eines Benutzers. Damit QUIQQER unterscheiden kann, für welchen Bereich das Zugriffsrecht gültig ist, können Sie dies in area="" festlegen.
Das area Attribut ist optional und der Standard-Wert ist global. Somit kann das Recht für Benutzer und/oder Gruppen gesetzt werden.
Folgende areas existieren in QUIQQER:
-
global
: Globales Zugriffsrecht (Gruppen und Benutzer) -
user
: Zugriffsrecht für einen Benutzer -
groups
: Zugriffsrecht für eine Gruppe -
site
: Zugriffsrecht für eine Seite -
project
: Zugriffsrecht für ein Projekt -
media
: Zugriffsrecht für den Media-Bereich eines Projektes
Wörter die nicht im name="" Attribut vorkommen dürfen
Generell sollten keine Sonderzeichen verwendet werden, um Probleme zu vermeiden.
Einzig erlaubte Zeichen in einem Zugriffsrecht sind a-z
, A-Z
, .
und _
.
Übersetzung für den Administrationsbereich
Übersetzen können Sie die <permissions>
wie jedes Plugin / Paket über die locale.xml.
<groups name="mein/paket" datatype="js,php">
</group>
Um nun ein Zugriffsrecht zu übersetzen, nehmen Sie für das name Attribut des <locale>
Nodes den Namen des Zugriffsrechts plus permission.
davor.
D.h. für das Zugriffsrecht
<permission name="quiqqer.admin" type="bool">
<defaultvalue>1</defaultvalue>
</permission>
wäre folgender locale Eintrag möglich:
<groups name="quiqqer/quiqqer" datatype="js,php">
<locale name="permission.quiqqer.admin">
<de><![CDATA[Administration]]></de>
<en><![CDATA[Administration]]></en>
</locale>
</groups>
In der linken Sitemap der Zugriffsverwaltung werden die Rechtetitel stückweise aufgeteilt.
Zum Beispiel:
- permission.quiqqer
- permission.quiqqer.projects
Die Übersetzung-Variablen hierfür besitzen ein _header am Ende des Rechts.
Für das Rechte quiqqer.editors.toolbar.delete
müssten folgende locale Einträge gemacht werden:
- permission.quiqqer._header
- permission.quiqqer.editors._header
- permission.quiqqer.editors.toolbar._header
Beispiel:
<locale name="permission.quiqqer._header">
<de><![CDATA[QUIQQER]]></de>
<en><![CDATA[QUIQQER]]></en>
</locale>
<locale name="permission.quiqqer.editors._header">
<de><![CDATA[Editor / WYSIWYG]]></de>
<en><![CDATA[Editor / WYSIWYG]]></en>
</locale>
<locale name="permission.quiqqer.editors.toolbar._header">
<de><![CDATA[Toolbar]]></de>
<en><![CDATA[Toolbar]]></en>
</locale>
Beispiele für die Abfrage der Permissions
PHP:
$has = QUI\Permissions\Permission::hasPermission('permission');
// throwed exceptions
QUI\Permissions\Permission::checkPermission('permission')
// schnell checks für session nutzer
QUI\Permissions\Permission::isSU();
QUI\Permissions\Permission::isAdmin();
// schnell checks für nutzer
QUI\Permissions\Permission::isSU($User);
QUI\Permissions\Permission::isAdmin($User);
JavaScript:
require(['Permissions'], function(Permissions) {
Permissions.hasPermission('permi.name').then(function(hasPerm) {
console.log(hasPerm);
});
})