Képek korlátozása felhasználók szerint
Php - Mysql alapú saját fejlesztésű oldalamon azt szeretném elérni, hogy ha egy felhasználóm bejelentkezés után feltölt egy képet a szerverre, akkor azt a saját fiókjában bármikor megtekinthesse, de más felhasználó ne láthassa, még akkor se ha ugyan azt az url-t beírja a böngészőbe.
Nem tudom hogyan lehet a fájlokat ilyen módon korlátozni, valami ötlet?
■ Nem tudom hogyan lehet a fájlokat ilyen módon korlátozni, valami ötlet?
Jogosultság
Akár adatbázisban, akár fájlrendszerben tárolod a felhasználók képeit, csinálj egy táblát, ahol minden egyes képfájl nevét és a felhasználó azonosítóját letárolod.
Bejelentkezés után vélhetően egy SESSION változóba bekerül a felhasználó azonosítója, így a kép megjelenítésére irányuló kéréskor vizsgálhatod, hogy csak azokat a képeket kérdezze le, amelyek felhasználó azonosítója megegyezik a SESSION-ban tárolt felhasználó azonosítóval.
Ha mondjuk egyel előrébb mész és feltételezed, hogy a felhasználók megoszthatnak egymásközt képeket, sőt, bizonyos képeket megmutatnak nem bejelentkezett felhasználóknak is, akkor célszerű csinálni még egy mezőt amibe beírod a kép megjelenítéséhez kapcsolódó jogosultságot (pl.:0=private, 1=corporate,2=public).
Ezek után vizsgálhatod, hogy egy kép kinek a tulajdona, meg azt is, hogy kik láthatják.
Nem egészen világos
Egyébként alapjában véve nem értem azt, hogy ha pl. van nekem egy képem mondjuk az ftp gyökér könyvtárban, akkor ugye elvileg olyan helyre kell tennem, amit böngészőből is el lehet érni, így mi akadályoz meg akárkit hogy a kép fájl elérési útját beírja a böngészőbe. Én ezt nem értem, magát a fent leírt azonosítási folyamatot session alapján azt értem.
Valaki világosítson fel, mert én itt valamit akkor vagy nagyon nem értek, vagy félreértek.
Indítsunk egy kicsit messzebbről...
Innentől kezdve egyenes az út az előző hozászolásomban leírtakhoz, ugyan is még ha tudnád is a fájl pontos helyét, ha az beljebb van mint a webroot (feljebb meg ugye nem lehet), akkor az a kérés a fornt controller-en landol. Itt már mehet az azonosítgatás és a jogok vizsgálata.
Nézd meg a flickr-t (http://www.flickr.com/photos/s_volenszki/3793105672/)! Ott sincsenek .jpg-ek az url-ben.
Megjegyzés 1:
Bár nem volt szó róla, gondolom a képeket a felhasználók űrlapon töltik fel nem ftp protokolon?!
Megjegyzés 2:
http://www.phpriot.com/articles/images-in-mysql
Már értem
Már csak akkor azt kellene tudnom, hogy egy ilyen htaccess fájl hogy néz ki, és minek kell pontosan működnie ilyenkor. Illetve ha apache beállítás miatt nem működik, akkor a rendszergazda felé milyen kéréssel kell forduljak ez ügyben.
mod rewrite
rewrite modul bekapcsolása valamint a weblaboron jó cikkek és hozzászólások vannak a témáról.
Üdv:
Gábor.
Például így:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !(^index.php$)
RewriteCond %{REQUEST_URI} !(\.(js|css|ico|gif|png)$)
RewriteRule (.*) index.php
</IfModule>
A többi kérdésedre Gábor már mutatott jó írányt!
Publikus fájlok
Akkor semmiképp se rakd olyan helyre ahonnan el lehet érni URL alapján. Azaz rakd a Document Root-on kívülre, és csak PHP segítségével lehessen hozzáférni, így tudod ellenőrízni, hogy az illetőnek van-e hozzáférése.
Pl: http://example.com/index.php?showImage/kepem.jpg
És a pszeudokód valami ilyesmi:
Azt hiszem megvan
Én nem tenném adatbázisba
A jogosultság kezelés ettől nem lesz könnyebb, szerintem legalábbis. Jobban járnál, ha megértenéd a webszerver működését, tisztába jönnél, hogy mi a Document root, mit ér el a php a szerveren, mit érhetnek el a látógatók az url-en keresztül stb.
Ha a képeid adatbázisban vannak, akkor írnod kell egy kis scriptet ami ezt a képet kiszolgálja a kliensnek (ellenőrzi a jogosultságot, kiszedi a db-ből a képet és leküldi a böngészőnek), ugyanilyen scriptet kell írnod akkor is, ha képek nincsenek adatbázisban (ekkor a jogosultág ellenőrzés után kiszeded a kép meta adatait a db-ből pl. az elérési útvonalat és a fájlnevet aztán ez alapján fájlrendszerből kiszolgálod a képet), hanem fájlrendszerben vannak de a docrooton kívül. Adatbázisba én csak a képek leíróit tenném (ki a tulajdonosa, mi a neve, típusa, mikor töltötték fel, mi a mérete, esetleg a szélesség és magassága, file neve, elérési útja a fájlrendszerben, stb.), a hozzá tartozó jogosultságokat meg úgy tárolod megintcsak ahogy akarod illetve ahogy a jogosultsági rendszeredet kitalálod.