Ergebnis 1 bis 4 von 4

Thema: Benutzergruppen Check Permissions

  1. #1
    Gesperrt
    Registriert seit
    07.10.2014.
    Ort
    Berlin
    Beiträge
    64

    Standard Benutzergruppen Check Permissions

    Hi ihr da,

    ich versuche gerade die check permissions für eine von mir geschriebene Erweiterung hinzukriegen.

    In der tl_user bzw. tl_user_group wird das Recht korrekt hinterlegt. Jedoch scheint bei der Abfrage etwas schief zu laufen, denn das Recht existiert nicht.

    Wenn mir jemand eventuell einen kurzen Überblick gewähren könnte, wie genau das funktionopelt (und wo die Fehlerquelle sein könnte), wäre mir schon ziemlich geholfen (habe mich einfach stupide an die Vorgehensweisen anderer Extension gehalten).

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Wenn ich dich richtig verstehe, versuchst du im Backend ein \BackendUser::hasAccess('permission', 'customGroup') zu machen, richtig? Hast du auch $GLOBALS['TL_PERMISSIONS'][] = 'customGroup'; gesetzt? Das ist zusätzlich notwendig zu den Datenbankfeldern.

  3. #3
    Gesperrt
    Registriert seit
    07.10.2014.
    Ort
    Berlin
    Beiträge
    64

    Standard

    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?
    Geändert von Knigge (11.11.2014 um 15:39 Uhr)

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Zitat Zitat von Knigge Beitrag anzeigen
    Wo gehört denn hier das
    Code:
     $GLOBALS['TL_PERMISSIONS'][] = 'customGroup';
    rein?
    config.php

    Siehe auch die Anleitung zu den Rechten hier: https://contao-boilerplate.alexander...kend-user.html
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •