yedpodtrzitko | 84.42.167.* | 23.4.2008 19:48 |
| Zastance co nejmene souboru? To je napad! Vpisu vsechny moduly a pomocne classy ve svem RS k jadru do jednoho souboru, cimz odpadne problem s includovanim potrebnych souboru, genialni :D
Kdybych mel tedy poradit, tak radim: podivat se na nejaky existujici RS.
Neco z meho stareho... cehosi.
Tabulka do DB. user_id je identifikator, bla bla bla... hash vytvorim pri prihlaseni, ulozim do session i DB, a pak proti sobe overuji. Kazdy uzivatel ma prava. Dokonce i neprihlaseny uzivatel (jmeno guest, prava 0), protoze kazda akce ma definovana prava, s jakymi je dostupna.
CREATE TABLE user (
'user_id' int (7) unsigned auto_increment,
'nick' varchar (50),
'pwd' char (32),
'email' varchar (50),
'aktivni' tinyint (1) unsigned,
'hash' varchar (32),
'prava' tinyint (1) unsigned,
PRIMARY KEY (`user_id`),
);
INSERT INTO 'user' ('nick', 'pwd', 'aktivni', 'hash', 'prava') VALUES
('guest', md5(sha1(guest)), 1, 'guest', 0),
('admin', md5(sha1(heslo)), 1, NULL, 9);
------------------------------------
------------------------------------
config.inc.php
define('db_host', 'server');
...//atd
------------------------------------
------------------------------------
index.php
require_once 'core.php';
core::get()->run();
------------------------------------
------------------------------------
Jadro. Zde vsechno inicializuji. Zbytecny rozepisovat, imho.
core.php
class core {
function __construct() {
$this->_init(); //soubory, DB, prava...
}
function run() {
//getmodule a getaction berou promenne z $_GET
$req = new Request(core::getModule(), core::getAction());
$obj = $req->getRequest();
$obj->toString();
}
}
------------------------------------
------------------------------------
trida obstaravajici obsluhu pozadavku podle prav ze session+request z $_GET oproti DB
request.php
class request {
function __construct($module, $action) {
//dodatecne osetreni vstupu, nepodstatne
$result = $this->_checkRights(); //overeni proti DB, jestli je pozadavek proveditelny, pripadne vrati default
$this->_prepareRequest($result); //vytvori novy objekt tridy podle $result
}
function getRequest() {
//vrati objekt vytvorene tridy, vzdy potomek spolecneho modulu
}
}
------------------------------------
------------------------------------
trida pro obsluhu prihlasovani atp.
auth.php
class auth {
public function __construct() {
$this->check();
}
function check(){
if (!$this->isLogged()) {
$this->login();
return;
}
//ORM. z DB zkusi nacist zaznam podle hodnoty ze session
$OUser = new OSQLUser(Array('user_id' => $this->getId(), 'hash' => $this->getHash(), 'nick' => $this->getName(), 'prava' => $this->getPrava()));
if(!$OUser->getData()) {
$this->login();
core::setError('nejaka chyba');
}
}
function login($user='guest',$pwd= 'guest', $plain = false){
if($user == 'guest'){
$this->sessionCreate(1,'guest','guest', 1);
return true;
}
if ($plain == true) {
$pwd = SHA1($pwd);
}
$pwd = MD5($pwd);
$user = strtoupper($user);
$OUser = new OSQLUser(Array('nick' => $user, 'pwd' => $pwd));
$result = $OUser->getData();
if ( is_array($result)){
$hash = Substr(md5(time().$pwd), 0, Rand(20,30));
$OUser->setData(Array('hash' => $hash));
$OUser->save();
if($this->sessionCreate($result['user_id'], $user, $hash, $result['prava'])){
return true;
}
} else {
core::setError('nejaka chyba');
return false;
}
}
function logout () {
$this->login();
}
function sessionCreate ($id,$user,$hash,$prava) {
$_SESSION = Array(
'hash' => AddSlashes($hash),
'user' => AddSlashes($user),
'id' => IntVal($id),
'prava' => intval($prava));
return true;
} else{
die('error creating session');
return false;
}
}
function isLogged() {
return (auth::getPrava() > 0);
}
}
------------------------------------
------------------------------------
prihlasovani:
na onsubmit() se heslo hashuje SHA1() cez JS, hodnota v 'pwd_t' se vynuluje a nasetuje se do 'pwd'. Tim se pozna, ze heslo je hashovane. Pokud javascript neni zapnuty, heslo se odesle nehashovane a skrz SHA1() se prozene na strane serveru
<form action='http://domain/login' method='post' onsubmit='hashPwd();'>
<input id='pwd' type='hidden' name='pwd' />
<input id='user' type='FormInput' name='user' />
<input id='pwd_t' type='password' name='pwd_t' />
<inpu type='submit' value='Přihlásit' name='submit' />
</form>
nejaky otazky? |
|