Seite 1 von 1

Rechte für eigene Tabellen

Verfasst: 05.01.2014 15:42
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?

Re: Rechte für eigene Tabellen

Verfasst: 05.01.2014 16:29
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

Re: Rechte für eigene Tabellen

Verfasst: 05.01.2014 16:49
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

Re: Rechte für eigene Tabellen

Verfasst: 05.01.2014 16:53
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.

Re: Rechte für eigene Tabellen

Verfasst: 05.01.2014 17:16
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

Re: Rechte für eigene Tabellen

Verfasst: 05.01.2014 19:55
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 !