Ergebnis 1 bis 7 von 7

Thema: BE Benutzerzugriffsrechte wie mit beim Nachrichtenarchiv

  1. #1
    Contao-Fan Avatar von Michael
    Registriert seit
    19.06.2009.
    Beiträge
    479

    Standard BE Benutzerzugriffsrechte wie mit beim Nachrichtenarchiv

    Bei meiner Erweiterung soll im BE jeder Benutzer nur seine Schule und deren Datensätze sehen dürfen.
    Dies habe ich so hinbekommen mit:
    PHP-Code:
    $objUser = \BackendUser::getInstance();
    $objSchulen = \SchuleModel::findPublishedByPk($objUser->schule); 
    Soweit so gut, aber wenn im in der URL die ID-Nummer von Hand ändere, kann ich auch andere Schulen sehen. Also bräuchte ich eine Abfrage der Zugriffsrechte. Wie kann ich dies möglichst einfach lösen?
    Ich versuchte es mit:
    PHP-Code:
    $objUser = \BackendUser::getInstance();
    $schuleID = \Input::get('id'); 
    und diese dann vergleichen. Damit erhalte ich bei manuelle Eingeben einer anderen ID in der URL eine Fehlermeldung, aber ich kann dann auch nicht mehr einzelne Datensätze bearbeiten, da diese ja verschieden IDs haben und nicht mehr mit der $objUser ID übereinstimmen.
    Ich denke das Newsmodul machte eine solche Überprüfung. Man kann ja jedem Benutzer seine Archive zuordnen. Den Code dazu wollte ich im News-Modul modules/news/models/NewsArchiveModel.php nachschauen. Bin leider nicht fündig geworden. Kann mir jemand weiterhelfen?

    Edit: Mit
    PHP-Code:
    if ($objUser->hasAccess(2'news')) {
        
    // der Benutzer darf auf das News-Archiv mit der ID 2 zugreifen

    kann ich ja die Zugriffsrechte abfragen. Aber wo kann ich in meinem Modul das 'news' zu 'schulen' definieren?

    Besten Dank im Voraus!
    Geändert von Michael (22.02.2016 um 19:44 Uhr)
    Contao ist echt !

  2. #2
    Contao-Fan Avatar von Michael
    Registriert seit
    19.06.2009.
    Beiträge
    479

    Standard

    Habe noch weiter gesucht, aber bin leider nicht fündig geworden.
    Hat niemand einen Tipp oder habe ich das Problem zu ungenau beschrieben?

    Besten Dank im Voraus!
    Michael
    Contao ist echt !

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

    Standard

    Ich habe kürzlich selbst ein ähnliches Problem gehabt. Bei mir Vereine (ptable) mit jeweils Mitgliedern (ctable), bei Dir Schulen mit irgendwas. Schau Dir die tl_user und tl_user_groups von den News an. Du mußt dann nur noch statt der Nachrichtenarchive Deine Schulen in das Optionsarray einlesen. In der config.php mußt Du Contao Deine neuen Felder aus den beiden Dateien bekannt machen, z.B.:
    PHP-Code:
    $GLOBALS['TL_PERMISSIONS'][] = 'schulen'// Erlaubte Schulen
    $GLOBALS['TL_PERMISSIONS'][] = 'schulenr'// Schulenrechte 
    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

  4. #4
    Contao-Fan Avatar von Michael
    Registriert seit
    19.06.2009.
    Beiträge
    479

    Standard

    Besten Dank für deine Erklärungen. Leider kann ich dir so noch nicht ganz folgen.
    Ich denke das Ziel wäre, dass im BE unter Benutzer eine neu Kategorie entsteht, wie die der Archivrechte(siehe Screenshot), bei welcher ich dann jedem Benutzer seine Schule zuordnen kann.
    Bildschirmfoto 2016-03-30 um 17.57.11.png
    Habe aber dazu den Ansatz im tl_user oder tl_user_groups leider nicht gefunden.
    Contao ist echt !

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

    Standard

    Hier mal ein Codebeispiel aus meiner Erweiterung.

    dca/tl_user_group.php:
    PHP-Code:
    /**
     * Extend default palette
     */
    $GLOBALS['TL_DCA']['tl_user_group']['palettes']['default'] = str_replace('fop;''fop;{mivis_legend},mivis,mivisv,mivism;'$GLOBALS['TL_DCA']['tl_user_group']['palettes']['default']);


    /**
     * Add fields to tl_user_group
     */
    $GLOBALS['TL_DCA']['tl_user_group']['fields']['mivis'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_user']['mivis'],
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'foreignKey'              => 'tl_mivis_vereine.CONCAT(zps," ",name)',
        
    'eval'                    => array('multiple'=>true),
        
    'sql'                     => "blob NULL"
    );

    $GLOBALS['TL_DCA']['tl_user_group']['fields']['mivisv'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_user']['mivisv'],
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'options'                 => array('edit''editheader''copy''create''delete''toggle''show'),
        
    'reference'               => &$GLOBALS['TL_LANG']['tl_user_group']['mivisv_options'],
        
    'eval'                    => array('multiple'=>true),
        
    'sql'                     => "blob NULL"
    );

    $GLOBALS['TL_DCA']['tl_user_group']['fields']['mivism'] = array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_user']['mivism'],
        
    'exclude'                 => true,
        
    'inputType'               => 'checkbox',
        
    'options'                 => array('edit''copy''create''delete''toggle''show'),
        
    'reference'               => &$GLOBALS['TL_LANG']['tl_user_group']['mivism_options'],
        
    'eval'                    => array('multiple'=>true),
        
    'sql'                     => "blob NULL"
    ); 
    Das Feld mivis mit dem foreignKey ist für Dich interessant. Hier hole ich mir aus tl_mivis_vereine meine Vereine, in Deinem Beispiel die Schulen. Das sind dann die "Archivrechte", um bei Deinem Screenshot zu bleiben.
    Dasselbe mußt Du mit einer tl_user.php ("Benutzerrechte erweitern" ist das Stichwort) wiederholen. Hier kannst Du allerdings keine Rechte für Contentfelder vergeben.Das ist in Contao nicht vorgesehen.

    Die neuen Felder mußt Du wie gesagt in der config.php noch Contao bekanntmachen, damit sie in die Rechteverwaltung mit übernommen werden.
    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

  6. #6
    Contao-Fan Avatar von Michael
    Registriert seit
    19.06.2009.
    Beiträge
    479

    Standard

    Besten Dank für dein Beispiel!
    Verständnisfrage: Wenn ich nur einem Benutzer eine Schule zuordnen möchte, brauche ich dann auch tl_user_group anzupassen?

    Ich habe erreicht, dass ich einem Benutzer eine Schule zuordnen kann :-)
    Bildschirmfoto 2016-03-30 um 19.59.48.png
    Mit Code:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_user']['fields']['schule'] = array(
        
    'label'                => &$GLOBALS['TL_LANG']['tl_user']['schule'],
        
    'filter'                => true,
        
    'inputType'            => 'select',
        
    'foreignKey'            => 'tl_schule.schule_name',
        
    'eval'                => array('includeBlankOption' => true'mandatory'=>false'chosen'=>true'tl_class'=>'w50'),
        
    'sql'                => "int(10) unsigned NOT NULL default '0'",
        
    'relation'                        => array('type'=>'hasOne''load'=>'eager')
    ); 
    Wo genau findet die Überprüfung der Rechte statt?
    Geändert von Michael (30.03.2016 um 19:04 Uhr)
    Contao ist echt !

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

    Standard

    Bei den Benutzern hast Du die Möglichkeit, die Benutzerrechte zu erweitern. Hier wird dann auf tl_user zugegriffen. tl_user_group brauchst Du anscheinend nicht, wenn Du keine Gruppen für eine Schule anlegen willst.

    Die Überprüfung der Rechte erfolgt über die BackendUser-Klasse (oder User-Klasse?). Die kannst Du Dir ja mal genauer anschauen. Ich wollte die Rechteverwaltung kürzlich ja mal aufbohren. Zu dem Thema hatte mir aber niemand geantwortet. Mit einer Kopie der BackendUser.php konnte ich zumindest eine eigene Rechteverwaltung der von Contao hinzufügen. Im Moment ruht das Projekt aber etwas.
    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
  •