Eine erstellte Benutzergruppe verwende ich. Rechte kann ich da auch setzen und in der DB wird das auch hinterlegt. Aber offenbar habe ich etwas bei der Abfrage der Rechte falsch gemacht.
Von
$GLOBALS['TL_PERMISSIONS'][] = 'customGroup';
habe ich bisher noch nichts gehört oder gelesen. Wo und wie muss das genutzt werden?
Habe meine tl_user.php und tl_user_group.php
PHP-Code:
<?php
/**
* Extend default palette
*/
$GLOBALS['TL_DCA']['tl_user']['palettes']['extend'] = str_replace('formp;', 'formp;{sequenceSlider_legend},sliders,sliderp;', $GLOBALS['TL_DCA']['tl_user']['palettes']['extend']);
$GLOBALS['TL_DCA']['tl_user']['palettes']['custom'] = str_replace('formp;', 'formp;{sequenceSlider_legend},sliders,sliderp;', $GLOBALS['TL_DCA']['tl_user']['palettes']['custom']);
/**
* Add fields to tl_user_group
*/
$GLOBALS['TL_DCA']['tl_user']['fields']['sliders'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['sliders'],
'exclude' => true,
'inputType' => 'checkbox',
'foreignKey' => 'tl_sequenceSlider.title',
'eval' => array('multiple'=>true),
'sql' => "blob NULL"
);
$GLOBALS['TL_DCA']['tl_user']['fields']['sliderp'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['sliderp'],
'exclude' => true,
'inputType' => 'checkbox',
'options' => array('create', 'delete'),
'reference' => &$GLOBALS['TL_LANG']['MSC'],
'eval' => array('multiple'=>true),
'sql' => "blob NULL"
);
PHP-Code:
<?php
/**
* Extend default palette
*/
$GLOBALS['TL_DCA']['tl_user_group']['palettes']['default'] = str_replace('formp;', 'formp;{sequenceSlider_legend},sliders,sliderp;', $GLOBALS['TL_DCA']['tl_user_group']['palettes']['default']);
/**
* Add fields to tl_user_group
*/
$GLOBALS['TL_DCA']['tl_user_group']['fields']['sliders'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['sliders'],
'exclude' => true,
'inputType' => 'checkbox',
'foreignKey' => 'tl_sequenceSlider.title',
'eval' => array('multiple'=>true),
'sql' => "blob NULL"
);
$GLOBALS['TL_DCA']['tl_user_group']['fields']['sliderp'] = array
(
'label' => &$GLOBALS['TL_LANG']['tl_user']['sliderp'],
'exclude' => true,
'inputType' => 'checkbox',
'options' => array('create', 'delete'),
'reference' => &$GLOBALS['TL_LANG']['MSC'],
'eval' => array('multiple'=>true),
'sql' => "blob NULL"
);
Und so sieht meine check permission aus.
PHP-Code:
/**
* Check permissions
*/
public function checkPermission()
{
if ($this->User->isAdmin)
{
return;
}
// Set root IDs
if (!is_array($this->User->sliders) || empty($this->User->sliders))
{
$root = array(0);
}
else
{
$root = $this->User->sliders;
}
$GLOBALS['TL_DCA']['tl_sequenceSlider']['list']['sorting']['root'] = $root;
// Check permissions to add sliders
if (!$this->User->hasAccess('create', 'sliderp'))
{
$GLOBALS['TL_DCA']['tl_sequenceSlider']['config']['closed'] = true;
}
// Check current action
switch (Input::get('act'))
{
case 'create':
case 'select':
case 'show':
// Allow
break;
case 'edit':
// Dynamically add the record to the user profile
if (!in_array(Input::get('id'), $root))
{
$arrNew = $this->Session->get('new_records');
if (is_array($arrNew['tl_sequenceSlider']) && in_array(Input::get('id'), $arrNew['tl_sequenceSlider']))
{
// Add permissions on user level
if ($this->User->inherit == 'custom' || !$this->User->groups[0])
{
$objUser = $this->Database->prepare("SELECT sliders, sliderp FROM tl_user WHERE id=?")
->limit(1)
->execute($this->User->id);
$arrsliderp = deserialize($objUser->sliderp);
if (is_array($arrsliderp) && in_array('create', $arrsliderp))
{
$arrsliders = deserialize($objUser->sliders);
$arrsliders[] = Input::get('id');
$this->Database->prepare("UPDATE tl_user SET sliders=? WHERE id=?")
->execute(serialize($arrsliders), $this->User->id);
}
}
// Add permissions on group level
elseif ($this->User->groups[0] > 0)
{
$objGroup = $this->Database->prepare("SELECT sliders, sliderp FROM tl_user_group WHERE id=?")
->limit(1)
->execute($this->User->groups[0]);
$arrsliderp = deserialize($objGroup->sliderp);
if (is_array($arrsliderp) && in_array('create', $arrsliderp))
{
$arrsliders = deserialize($objGroup->sliders);
$arrsliders[] = Input::get('id');
$this->Database->prepare("UPDATE tl_user_group SET sliders=? WHERE id=?")
->execute(serialize($arrsliders), $this->User->groups[0]);
}
}
// Add new element to the user object
$root[] = Input::get('id');
$this->User->sliders = $root;
}
}
// No break;
case 'delete':
if (!$this->User->hasAccess('delete', 'sliderp'))
{
$this->log('Not enough permissions to '.Input::get('act').' sequenceslider ID "'.Input::get('id').'"', 'tl_sequenceSlider checkPermission', TL_ERROR);
$this->redirect('contao/main.php?act=error');
}
break;
case 'editAll':
case 'deleteAll':
case 'overrideAll':
$session = $this->Session->getData();
if (Input::get('act') == 'deleteAll' && !$this->User->hasAccess('delete', 'sliderp'))
{
$session['CURRENT']['IDS'] = array();
}
else
{
$session['CURRENT']['IDS'] = array_intersect($session['CURRENT']['IDS'], $root);
}
$this->Session->setData($session);
break;
default:
if (strlen(Input::get('act')))
{
$this->log('Not enough permissions to '.Input::get('act').' sequenceslider', 'tl_sequenceSlider checkPermission', TL_ERROR);
$this->redirect('contao/main.php?act=error');
}
break;
}
}
Rufe ich in der DCA auf.
PHP-Code:
'onload_callback' => array
(
array('SequenceSlider\tableSequenceSlider', 'checkPermission'),
),
Ich habe mich bei denen an das gehalten, was ich in anderen Erweiterungen gesehen habe.
Wo gehört denn hier das
Code:
$GLOBALS['TL_PERMISSIONS'][] = 'customGroup';
rein?
Lesezeichen