Kérek mindenkit, akinek nem a rangokkal, oldalak megtekintésével van problémája, a következő oldalon kérdezzen:
Meghívós loginrendszer - R.E. Login v2.0
Ez a login talán a legnépszerűbb programom. De való igaz, hogy nem készítettem hozzá részletes használati útmutatót. Mivel egy komplett leírásra egyszerre nincs időm, úgy döntöttem, a leggyakrabban feltett kérdésekre válaszolok. Amik egyben a leglényegesebbek is.
Hogyan kössem regisztrációhoz egy oldal megtekintését?
Teljes oldal letiltása
Ebben a verzióban létezik egy System
osztály, ami többek között tartalmaz egy protectedSite()
nevű metódust. Ez a metódus mondja meg a loginnak, hogy az adott oldal védett. Tehát nem tekintheti meg akárki. Paraméter nélkül hívva csak a belépést követeli meg. És ilyenkor a config-ban beállított ( Telepítéskor megadott, vagy utólag a classes/Config.class.php -ben beállított ) főoldalra irányít át, vagy külön beállított „Védett oldal fájlja” jelzésű ( config fájlban FILE_PROTECTED_SITE konstans ) oldal esetén utóbbira..
require_once 'init.php';
System::protectedSite();
?>
Amit ide írok, azt kizárólag belépett user tekintheti meg. A többi át lesz irányítva.
Az oldal egy részének letiltása
Ha az oldalon csak egy rész van, amit nem láthat akárki, akkor a System::$logged
változó vizsgálata szükséges. Ami true
értéket kap, ha a felhasználó bejelentkezett és false
marad, ha még nem lépett be.
require_once 'init.php';
?>
Ezt a tartalmat bárki láthatja
<?php if (System::$logged) : ?>
Ezt viszont csak aki bejelentkezett
<?php endif ?>
Bonyolultabb korlátozások jogok megkülönböztetett jogok alapján
A loginban léteznek különböző rangok. Ezek hivatottak a jogosultságokat megkülönböztetni. Alapvetően két fő adatból áll. A változónév, ami alapján programból azonosítani lehet a rangot, és egy név a megjelenítéshez.
Előre beállított rangok
Változó név | Név a megjelenítéshez | Magyarázat |
---|---|---|
guest | Vendég | Be nem jelentkezett felhasználó. |
user | Felhasználó | Egyszerű felhasználó. Alapértelmezett rang a regisztráció után. |
banned | Tiltott | Olyan regisztrált tag, akinek a belépését egy adminisztrátor megtiltotta. |
admin | Adminisztrátor | Korlátozott adminisztrációs jogokkal rendelkező tag. |
owner | Tulajdonos | Teljes körű adminisztrációs jogokkal rendelkező tag. Az első regisztráló ezt a rangot kapja. |
Teljes oldal letiltása rangoktól függően.
A már említett protectedSite()
metódust lehet használni hozzá. De paraméterként át kell adni a változónevek tömbjét, amely rangú tagoknak engedélyezett az oldal megtekintése.
Fontos tehát, hogy nem azokat kell felsorolni, akik tiltva vannak!
require_once 'init.php';
System::protectedSite(array('owner', 'admin'));
?>
Amit ide írok, azt kizárólag admin és tulajdonos tekintheti meg. A többi át lesz irányítva.
De
require_once 'init.php';
System::protectedSite(array('guest', 'user'));
?>
Amit ide írok, azt vendég is láthatja és egyszerű felhasználó is. Viszont se admin, se tulajdonos nem.
A banned rangnak csak beléptetéskor van jelentősége. Így ez egy amolyan kakukktojás rang. Mert ilyen esetben a beléptetés nem történik meg és a rang marad vendég.
Az oldal egy részének letiltása rangok alapján
A System::protectedSite()
metódus egy másik metódust használ fel a rangok eldöntésére. A System
osztálynak van egy tulajdonsága, ami az aktuális böngésző felhasználót tartalmazza. Ez pedig a System::$user
Ennek van egy rank()
metódusa, aminek átadva a rangok tömbjét (vagy egyetlen rangott stringként), visszakapjuk logikai értékként, hogy azon rangok közül bármelyikkel is egyezik-e a tag rangja.
require_once 'init.php';
?>
Ezt mindenki látja.
<?php if (System::$user->rank('user')) : ?>
Ezt csak felhasználó rangúak látják.
<?php endif ?>
<?php if (System::$user->rank(array('owner','admin'))) : ?>
Ezt csak admin és tulajdonos látja.
<?php endif ?>
Új rangokat is fel lehet venni admin felületen. Majd azokat az előbb ismertetett módon lehet vizsgálni.
Tag aktuális rangjának lekérdezése:
Megjelenítendő rangnév
Erre gyakrabban lehet szükség, ezért létezik rá egy metódus szintén. Ez pedig rankName()
.
echo System::$user->rankName();
Kiírja például, hogy „Adminisztrátor”.
A tag rang ID-jának lekérdezése
A users táblában a rang csak egy id formájában jelenik meg. Mivel ez egy egyszerű tulajdonság, így a következőképpen írható ki:
echo 'Felhasználó rangjának ID-ja:'.System::$user->rank;
A felhasználói jog változónevének lekérdezése
Ez már ritkábban kellhet. inkább az ellenőrzésekre van szükség. Ezért nincs rá külön metódus a userben. Viszont megoldás persze van. Létezik egy Ranks osztály, amit tulajdonképpen a User osztály is felhasznál. Ennek a Ranks osztálynak vannak különböző metódusai. A legáltalánosabb, és egyben az egyetlen lehetőség a rang változójának lekérdezésére a getRank()
.
* A rang egy adatának lekérdezése
*
* A $return mező értékét kérdezi le, ha a $by mező értéke $value
* Ha egy rang sem felel meg a feltételnek, akkor null-t ad vissza.
*
* @param string $return Lekérdezendő mező neve
* @param string $by Milyen mezőnév alapján kérdezzen le
* @param mixed $value Mi legyen a $by mező értéke.
* @return mixed
*/
public static function getRank($return, $by, $value)
{
$by = strtolower($by);
$value = strtolower($value);
foreach (self::getInstance() as $row)
{
if (strtolower($row[$by]) == $value)
{
return (is_null($return)) ? $row : $row[$return];
}
}
return null;
}
echo 'A felhasználó rangjának változója: '.Ranks::getRank('varname','rankid', System::$user->rank);
Egyéb lehetőségek
Név lekérdezése ID alapján: echo Ranks::getNameById(System::$user->rank);
Név lekérdezése változó alapján: echo Ranks::getNameByVar('admin');
ID lekérdezése változó alapján: echo Ranks::getIDByvar('admin');
A fenti példákban a System::$user
változót használtam a tag objektumának elérésére. A profil megtekintése és változtatása oldalakon elég csak a $user
változót használni. És az az épp megtekintett tag objektumát adja. Ennek megfelelően változhatnak a megoldások a fenti példákhoz képest.
Hozzászólások
Igen, ez lenne a gond :/
Igen, ez lenne a gond :/
Akkor minden bizonnyal egyik
Akkor minden bizonnyal egyik csoportba sem tartozik a felhasználó, amivel nézed az oldalt, vagy még előtte írsz el valamit, amitől arra a vizsgálatra rá sem fut. De ezeket végig kell próbálgatni.
Captha
Üdv! Köszi a feltõltést! de egy pici problémám lenne a captcha kóddal... a tárhelyen nem jeleniti meg a képet igy nem tudok be Regisztrálni... Most mi a tehendõ??
Másik oldal
Helló. Ennek az oldalnak a tetején kiemelve jeleztem, hogy a nem jogokkal kapcsolatos kérdéseket hol lehet feltenni. Azon az oldalon leírtam ennek a problémának a megoldását is. Ami tárhelytől függően más lehet, de többnyire az útvonalakkal kapcsolatos.
Átirányítás
Szia,
Aki bejelentkezik, azt nem dobja a rendszer át egy védett oldalra, hanem marad az index.php-n csak láthatóvá válnak a dolgok.
Azt hogyan lehet megcsinálni, hogy aki bejelentkezett átirányítja egy oldalra?
Próbáltam így, de nem jó:
require_once 'init.php';
require_once 'relogin2/login.php';
?>
<?php if (System::$logged) : ?>
<?php endif ?>
<?php
header("Location: jatek.php"); /* Átirányít */
exit; /* Biztossá teszi azt, hogy az következő kódrész nem fut le. */
?>
Ha oda raknád, ahol teljesül
Ha oda raknád az átirányítást, ahol teljesül a feltétel és nem utána, akkor átirányítana. Vagyis így is megteszi, csak így minden alkalommal.
De a jatek.php azért tényleg legyen védve, hogy ne lehessen elérni belépés nélkül.
Szia,
Szia,
Először bocsi a késői válaszra, vártam az email-t, mert azt hittem, hogy kapok ott valami értesítést:)
És megnéztem, tényleg rossz helyen volt, köszi!
És persze, le van az védve :)
Szia,
Szia,
Felraktam a scriptet, minden jó, csak van egy hiba (szerintem a webhosttal), hogy amikor rá megyek a kijelentkezés gombra, akkor átirányít a webhost oldalára, hogy nincs ilyen oldal (000webhoston vagyok), miért?
Tudsz valami megoldást?
Ha felgörgetsz a lap tetejére
Ha felgörgetsz a lap tetejére, ott a link, ami a másik blogbejegyzésre mutat, ami nem kifejezetten a jogokkal foglalkozik. És ott valahol a vége felé leírtam a webhost beállításait is. Ha azt végig követed, szerintem megoldja a problémád.
Szia,
Szia,
Hogyan lehet olyat létrehozni, hogy az oldal tartalma minden felhasználónk más?
Tehát úgy mint egy böngészős játékban, ha valaki épít valamit, az a másik felhasználónak nem lesz meg.Ilyen adatlap féle.
Remélem érted.
Üdv
Erre elvileg már válaszoltam
Erre elvileg már válaszoltam és nem látom a választ. Érdekes.
Szóval azt építesz a loginba, amit akarsz. Már amennyiben tudsz adatbázist kezelni és értesz a php-hez. De a login nem ad hozzá külön támogatást. Innentől általános sql és php kérdés. Hogy ki, mit lát és ezt hogyan oldod meg, az csak tőled függ.