bestimmte Bilder nur für eingeloggte User sichtbar bestimmte Bilder nur für eingeloggte User sichtbar
 

News:

CPG Release 1.6.26
Correct PHP8.2 issues with user and language managers.
Additional fixes for PHP 8.2
Correct PHP8 error with SMF 2.0 bridge.
Correct IPTC supplimental category parsing.
Download and info HERE

Main Menu

bestimmte Bilder nur für eingeloggte User sichtbar

Started by Cookiie, May 21, 2013, 01:27:04 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Cookiie

Hi,

gibt es eine Möglichkeit einzelne Bilder oder Dateien zb. pdf's innerhalb eines Albums so handeln, dass diese nur für eingeloggte User sichtbar sind?
Die Lösung kann ruhig per Code sein, den Filter kann ich mir dann ggf. selber zusammen basteln, bräuchte nur Hilfe bei der Rechteeinschränkung.

Gruß Cookiie

Αndré

Ich würde die zugriffsbeschränkten Dateien per "Album Keyword" in das Album einbinden. D.h. du lädst die öffentlich sichtbaren Dateien ganz normal in das Album (1) hoch. Dann erstellst du ein zweites Album (2), welches nur von einer bestimmten Benutzergruppe einsehbar ist. Nun vergibst du für Album (1) ein Keyword. Dasselbe Keyword gibst du den Dateien in Album (2), welche in Album (1) angezeigt werden sollen.

Cookiie

Hm,

klingt leider für mich nicht wirklich praktikabel. Das kapieren 1. meine Mädels nicht die das dann bedienen müssen und 2tes mehr Aufwand als Nutzen am Ende.
Außerdem nutze ich die Keywords im Moment als Datumsfeld für die Alben, um die Alben danach zu sortieren. Das Datum muss einstellbar sein und soll sich nicht ändern wenn sich was am Album ändert.
Wir wollten die Galerie zusätzlich als Verwaltungstool nutzen und Informationen zu jedem Album einzeln hinterlegen, die nicht für jederman sichtbar sein sollen.

Falls noch jemand eine alternative Idee hat, immer her damit.

@André: Danke

Gruß Cookiie


Αndré

Quote from: Cookiie on May 21, 2013, 03:44:42 PM
Außerdem nutze ich die Keywords im Moment als Datumsfeld für die Alben, um die Alben danach zu sortieren.
Ich weiß nicht wie deine Galerie strukturiert ist. Aber falls das Datum eindeutig ist (es also für jedes Datum maximal 1 Album gibt), kannst du meinen Vorschlag trotzdem nutzen. Du musst "deinen Mädels" (;)) dann nur erklären, was sie zu tun haben bzw. selbst im Nachgang die betroffenen Dateien in das geschützte Album verschieben. Du benötigst ja nicht für jedes öffentliche Album ein extra geschütztes Album. Ein geschütztes Album, in dem alle Dateien abgelegt werden reicht ja aus.

Zugriffsrechte können auf Dateiebene nicht vergeben werden. Ein Mod oder Plugin, der die Variable $RESTRICTEDWHERE entsprechend erweitert dürfte das aber ändern. Ein Beispiel wie das standardmäßig mit den Alben geschieht, findest du in include/functions.inc.php:
    if ($FORBIDDEN_SET_DATA) {
        $RESTRICTEDWHERE .= " AND r.aid NOT IN (" . implode(', ', $FORBIDDEN_SET_DATA) . ")";
    }


Darunter könntest du jetzt etwas in der Art
    if (!USER_ID) {
        $RESTRICTEDWHERE .= " AND p.pid NOT IN (8, 15, 47, 11)";
    }

einfügen. Sollte funktionieren, hab ich aber nicht getestet. Sehr komfortabel ist das bisher natürlich auch nicht. Eine entsprechende Schnittstelle wäre günstig und die zugriffsbeschränkten PIDs solltest du dann am besten in der Datenbank abspeichern.

Cookiie

Hi,

unsere Galerie wird vom Grundansatz anders verwendet als die meisten anderen. Geschlossene Nutzergruppe, die die Alben erstellen und Bilder hochladen kann.
Wir haben eine Meerschweinvermittlungsseite. Jedes Album ist ein Tier. Sortiert wird nach dem Einstelldatum bzw. wenn vermittelt, nach dem Datum der Vermittlung. Da ich dieses Datum nirgends anders eintragen konnte und meine PHP-Kenntnisse noch nicht ausreichen, um die Albeneigenschaften entsprechend zu erweitern, habe ich die php-Seite für die Albenübersicht so modifiziert, das ich ein Datum, welches im Feld Keywords steht für die Sortierung verwendet wird.

Dein Code-Ansatz klingt vielversprechend. Da ich nur die Bilder sichtbar halten will für die Gäste und den Rest verstecke, kann ich hier über den Dateinamen filtern zb *.pdf. Wäre zumindest nen Versuch wert.
Plugin trau ich mich nicht ran, aber ein Mod wäre sicher machbar.

Danke und wenn ich Hilfe brauche meld ich mich.
Cookiie

Αndré

Wenn du für Gäste ausschließlich Bilddateien anzeigen möchtest, sollte folgender Ansatz ausreichend sein:
    if (!USER_ID) {
        $RESTRICTEDWHERE .= " AND p.filename LIKE '%.jpg'";
    }

(vorausgesetzt alle Dateien haben die Dateiendung "jpg").

Cookiie

Hi,

bis eben noch getestet.
Funktion in der function.inc.php lokalisiert und entsprechend mit
   
    if (!USER_ID) {
        $RESTRICTEDWHERE .= " AND (p.filename LIKE '%.jpg' OR p.filename LIKE '%.JPG' OR p.filename LIKE '%.png')";
    }

erweitert. Leider ohne sichtbaren Erfolg. Wenn ich die Thumbnailübersicht aufrufe, wird mir hier das Test-pdf angezeigt, aslo auch als Gast.

Die function.inc.php ist doch schon der richtige Ansatz oder müssen hier andere Dateien modifiziert werden? Ich hatte das so verstanden, dass die Funktionen durch php-include global genutzt werden in den entsprechenden php-Dateien. Wie in diesem Fall thumbnail.php und auch die displayimage.php.

Bin für Vorschläge offen.

Gruß Cookiie

Αndré

Der Ansatz mit $RESTRICTEDWHERE funktioniert offensichtlich nur mit Meta-Alben. Dort erhält man aber eine Fehlermeldung, da die Tabelle einen anderen Namen hat. Folgender Code funktioniert zumindest schonmal für die Meta-Alben:
    if (!USER_ID) {
        $RESTRICTEDWHERE .= " AND (filename LIKE '%\.jpg' OR filename LIKE '%\.png')";
    }

(nach ".JPG" brauchst du nicht zu suchen, MySQL unterscheidet das standardmäßig nicht).

Für "normale" Alben, suche nach
        if (array_key_exists('allowed_albums', $USER_DATA) && is_array($USER_DATA['allowed_albums'])
                && in_array($album, $USER_DATA['allowed_albums'])) {
            $approved = '';
        } else {
            $approved = GALLERY_ADMIN_MODE ? '' : 'AND approved=\'YES\'';
        }

        $approved = GALLERY_ADMIN_MODE ? '' : 'AND approved=\'YES\'';

und füge darunter folgendes ein:
        if (!USER_ID) {
            $approved .= " AND (filename LIKE '%\.jpg' OR filename LIKE '%\.png')";
        }

Cookiie

Hi André,

jetzt klappts. Super ist ne enorme Erleichterung für uns.

Gruß Cookiie