Rechte für eigene Tabellen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Rechte für eigene Tabellen

Beitrag von Walter91 »

Das Anwenden für Rechte ist in der DEV-Wiki sehr gut beschrieben und funktioniert auch sehr gut für eigene eingebundene Seiten und Tabellen.

Ich suche jetzt noch nach einer Lösung wie ich erreichen kann das nur der Benutzer der Daten in eine Tabelle eingetragen hat, diese auch ändern oder löschen kann.
Der Benutzer wird beim eintragen mit seiner ID-Nummer in der Tabelle gespeichert. Spalte: (author_id)
In der phpbb_acl_options habe ich eingefügt:
- u_meineseite_edit_own_article
- u_meineseite_delete_own_article

Leider kann ich dazu in der Wiki nichts finden. Kann jemand helfen?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Rechte für eigene Tabellen

Beitrag von Miriam »

Nach meiner Lesart hast Du hier den Terminus Tabelle in zwei verschiedenen Zusammenhängen gebraucht.
Nämlich einmal in Bezug auf eingegebene Daten innerhalb eines Formulars und einmal bzgl. der Datenspeicherung innerhalb einer DB Tabelle.
Die von Dir neu generierte Option des Löschens eigener Daten innerhalb einer (Formular-) Tabelle mußt Du dann natürlich vorher auf wahr oder falsch prüfen. Diese Option muß dann auch per User/ Gruppe gesetzt / vergeben werden.
Lies gern hier: https://wiki.phpbb.com/Tutorial.Permissions_guide
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Rechte für eigene Tabellen

Beitrag von Helmut »

Hallo Walter91,

wie genau soll deine Lösung ausschauen?

Ich nehme mal an über die Rechte sollen erst mal nur die bestimmten User überhaupt den Button zum Editieren bzw. Löschen sehen können und dann soll der betreffende User nur die Datensätze in der Tabelle sehen können die von ihm kommen?

Die generelle Abfrage der Berechtigung könntest mit sowas in der Art machen:

Code: Alles auswählen

if ($mode == 'edit' && $auth->acl_get('u_meineseite_edit_own_article') && $preview == false)
{
 hier die DB Abfrage usw. .....
} 
und in der DB Abfrage kannst dann mit sowas arbeiten

Code: Alles auswählen

AND author_id = " . $user->data['user_id'] . "
damit bekommst dann alle Datensätze vom betreffenden User.


Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Rechte für eigene Tabellen

Beitrag von Walter91 »

Hallo Miriam,
ich hab mich event. etwas blöd ausgedrückt.
Im ACP hab ich das alles drin und die Berechtigungen gesetzt.

Wenn ich so schreibe funktioniert das allerdings noch nicht richtig.
Admins und Moderatoren können jetzt löschen aber User nicht.

Code: Alles auswählen

if ( !$auth->acl_get('m_meineseite_delete_article') && !($auth->acl_get( 'u_meineseite_delete_own_article') && $user->data['user_id'] == $row['author_id'] ) )	
Wie schreibe ich das nun auf den richtigen User um?

Nachtrag:
Hallo Helmut da hatten wir wohl beide fast zeitgleich geschrieben.
Die Daten können von allen eingeloggten Usern gesehen werden. Mir geht es nur um das ändern, löschen.
Den 2.Teil deiner Antwort muss ich erst mal ausprobieren.
Zuletzt geändert von Walter91 am 05.01.2014 20:19, insgesamt 1-mal geändert.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Rechte für eigene Tabellen

Beitrag von Helmut »

Hallo Walter91,

deine if kann so garnicht gehen, weil du ja die author_id noch nicht hast, die bekommst ja erst aus der DB Abfrage. Es geht nur über die zwei Schritte, erst prüfen ob der User überhaupt die Berechtigung hat (mit $auth .....) und dann in der DB Abfrage user_id und author_id verknüpfen.

Erst einen Schalter setzen der nur den Berechtigten die Edit/Lösch Buttons anzeigt

Code: Alles auswählen

if ($auth->acl_get('m_meineseite_delete_article') && $auth->acl_get( 'u_meineseite_delete_own_article') 
{
     $template->assign_var('S_BERECHTIGT', true);
} 
und

Code: Alles auswählen

<!-- IF S_BERECHTIGT -->
Code .....
<!-- ENDIF -->
Dann machst die DB Abfrage mit der user_id, dann hast alle Datensätze die der User bearbeiten darf.

Ich hab mal einen kleinen Mod gebastelt der als Beispiel für ein Adressbuch dient mit eintragen, editieren und löschen, allerdings ohne die Berechtigungen. Kannst dir ja mal anschauen, vielleicht ist was dabei wo du brauchen kannst.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Rechte für eigene Tabellen

Beitrag von Walter91 »

Hallo Helmut,
dank deiner Hilfe funktioniert das jetzt :grin: :grin: :grin: ....

Später baue ich noch Meldungen für Berechtigte und unberechtigte User ein und dann ist das so wie ich das wollte.

Code: Alles auswählen

if ($mode == 'edit' && $auth->acl_get('u_meineseite_edit_own_article') && $preview == false)
    {
        $sql = 'SELECT * FROM ' . TESTMOD_TABLE . '
        WHERE id = ' . (int) $id . '
        AND author_id = ' . (int) $user->data['user_id'];
            
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        
        if ($preview == false)
        {
        // den Vorschau-Code spar ich mir jetzt mal
        } 

        if ($submit == true)
       {
        $db->sql_query('UPDATE ' . TESTMOD_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE id = ' . $id);
        
        // Message Ende EDIT    
        trigger_error($user->lang['DATENSATZ_EDIT'] . '<br /><br />' 
        . sprintf($user->lang['BACK_MAIN'], '<a href="' . append_sid("{$phpbb_root_path}testmod.$phpEx") . '">', '</a>') . '<br />' );
        }   
    } 
Nochmal DANKE für deine Hilfe Helmut !
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“