Benutzerberechtigungen implementieren
TL_PERMISSIONS GLOBAL
Als erstes müssen wir unsere Benutzerberechtigungen in der config.php eintragen.
config.php
<?php
$GLOBALS['TL_PERMISSIONS'][] = 'demo';
$GLOBALS['TL_PERMISSIONS'][] = 'demop';
Benutzer DCA anpassen
Als nächstes erstellen wir im unserem *dca' Ordner zwei neue Dateien tl_user.php
und tl_user_group.php
. Diese benötigen die jeweiligen Paletten und Felder für die Permissions (demo und demop).
Code Snippet tl_user
<?php
// Palette erweitern
$GLOBALS['TL_DCA']['tl_user']['palettes']['extend'] = str_replace('fop;', 'fop;{demo_legend},demo,demop;', $GLOBALS['TL_DCA']['tl_user']['palettes']['extend']);
$GLOBALS['TL_DCA']['tl_user']['palettes']['custom'] = str_replace('fop;', 'fop;{demo_legend},demo,demop;', $GLOBALS['TL_DCA']['tl_user']['palettes']['custom']);
// demo Feld für die Datensätze
$GLOBALS['TL_DCA']['tl_user']['fields']['demo'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['demo'],
'exclude' => true,
'inputType' => 'checkbox',
'foreignKey' => 'tl_demo.title',
'eval' => array('multiple' => true),
'sql' => "blob NULL"
);
// demop Feld für anlegen und löschen
$GLOBALS['TL_DCA']['tl_user']['fields']['demop'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['demop'],
'exclude' => true,
'inputType' => 'checkbox',
'options' => array('create', 'delete'),
'reference' => &$GLOBALS['TL_LANG']['MSC'],
'eval' => array('multiple' => true),
'sql' => "blob NULL"
);
Code Snippet tl_user_group
<?php
// pallete erweitern
$GLOBALS['TL_DCA']['tl_user_group']['palettes']['default'] = str_replace('fop;', 'fop;{demo_legend},demo,demop;', $GLOBALS['TL_DCA']['tl_user_group']['palettes']['default']);
// demo feld
$GLOBALS['TL_DCA']['tl_user_group']['fields']['demo'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['demo'],
'exclude' => true,
'inputType' => 'checkbox',
'foreignKey' => 'tl_demo.title',
'eval' => array('multiple' => true),
'sql' => "blob NULL"
);
// demop feld
$GLOBALS['TL_DCA']['tl_user_group']['fields']['demop'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['demop'],
'exclude' => true,
'inputType' => 'checkbox',
'options' => array('create', 'delete'),
'reference' => &$GLOBALS['TL_LANG']['MSC'],
'eval' => array('multiple' => true),
'sql' => "blob NULL"
);
Benutzergruppe
Wenn wir auf Benutzerverwaltung > Benutzergruppen und 'Neue Benutzergruppe erstellen* klicken, sollten wir eine neue Palette 'demo_legend' sehen.
Permissions implementieren
Mit der BackendUser Klasse können wir nun abfragen, ob ein Backend Benutzer eine entsprechende Benutzerberechtigungen besitzt. Dafür erstellen wir eine checkPermission Funktion. Die checkPermission Funktion können wir mit dem onload_callback Hook aufrufen.
Code Snippet
<?php
$GLOBALS['TL_DCA']['tl_demo'] = array
(
// confg
'config' => array
(
'onload_callback' => array
(
array('tl_demo', 'checkPermission')
)
)
);
class tl_demo extends Backend
{
public function __construct()
{
parent::__construct();
// BackendUser Klasse importieren
$this->import('BackendUser', 'User');
}
public function checkPermission()
{
// admin darf alles
if ($this->User->isAdmin) {
return;
}
// entferne den hinzufügen button
if (!$this->User->hasAccess('create', 'demop')) {
$GLOBALS['TL_DCA']['tl_demo']['config']['closed'] = true;
}
// entferne den löschen button
if ( !$this->User->hasAccess( 'delete', 'demop' ) ) {
unset( $GLOBALS['TL_DCA']['tl_demo']['list']['operations']['delete'] );
}
// entferne alle nicht zugewiesenen datensätze
if ( !is_array( $this->User->demo ) || empty( $this->User->demo ) ) {
$root = array(0);
} else {
$root = $this->User->demo;
}
$GLOBALS['TL_DCA']['tl_demo']['list']['sorting']['root'] = $root;
$act = Input::get('act');
// verhindere das löschen wenn keine rechte vorhanden sind
if (($act == 'delete' || $act == 'deleteAll') && (!$this->user->isAdmin || !$this->User->hasAccess('delete', 'demop'))) {
$this->redirect('contao/main.php?act=error');
}
}
}
Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Datenschutzerklärung
Alexander Naumov
Contao Freelancer, PHP Entwickler und Web Allrounder