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
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
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

....
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 !