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');
        }
    }
}
Zurück