[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите начинающему в ООП
web-monster
Привет! Вообщем решил переписать на ООП функцию авторизации и ввести группы но чего то туго догоняю..
Мне нужно сделать так чтобы в дальнейших классах я мог проверять есть доступ или нет, ну и в какой группе он состоит! Подскажите как это должно правильно выглядеть, чтобы не было быдлокодом)

Вот что накатал:

class Access extends Db
{

public $group;

function query_access()
{
$logname=$_COOKIE['name'];
$logpass=$_COOKIE['pass'];
$logname=mysql_real_escape_string($logname);
$logpass=mysql_real_escape_string($logpass);
$this->logname = $logname;
$this->logpass = $logpass;
$res = $this->sql("SELECT * FROM users WHERE user = '$this->logname' AND pass='$this->logpass' AND status = 'active'");
return $res;
}

function get_access()
{
$res = $this->query_access();
if(preg_match("/^[0-9A-Z@]{4,20}$/i",$this->logname)&&preg_match("/^[0-9A-Z@]{6,40}$/i",$this->logpass))
{

$this->sql("SELECT * FROM users_ban WHERE ip = '$_SERVER[REMOTE_ADDR]' OR user='$this->logname'");
if(mysql_affected_rows()!=0)
{
$access="false";
header("Location: ban.php");
}
else
{

$row = mysql_fetch_array($res);
if($row["id"]=="")
{
$access="false";
}
else
{
$this->group = $row["group"];
$access="true";
}

}


}

else
{
$access="false";
}
return($access);
}

}


$access = new Access();
$access= $access->get_access();


и вот например в классе Topmenu мне нужно знать доступ есть или нет и переменная Group равна админ или ещё кто.. Как туда их передать?



Спустя 2 часа, 55 минут, 59 секунд (14.06.2010 - 00:50) Ice написал(а):
ну, у тебя тут всё в кучу свалено: и обработка строк и выполнение запросов, и их обработка, и чего здесь только нет.
Зачем наследуешь класс Db?

Я здесь вижу, как уже говорил, как минимум три, или даже четыре отдельно стоящих и организованных класса (StringProcessor_Composite, Db_Singleton, DataHandler, Error_Factory), собранных разными паттернами для облегчения дальнейшей разработки.
Дело в том, что класс Access_Facade - это, как бы, действие, которое выполняется средствами, некоторые из которых (например обработка строк) вообще висят в воздухе.

Спустя 7 часов, 26 минут, 13 секунд (14.06.2010 - 08:16) web-monster написал(а):
db Наследую чтобы можно было делать запрос вида $db->sql("запрос");
А как будет правильно выглядеть этот код можете показать пожалуйста, чтобы я знал как правильно писать в ооп) А то я всё в кучу собираю)

Спустя 3 часа, 37 минут, 34 секунды (14.06.2010 - 11:54) Ice написал(а):
для примера могу привести класс регистрации для одной гостевухи. У тебя должно получиться примерно то же самое. Этот класс, кстати можно было уменьшить еще больше.


class Registration_Facade
{
public static $data = array();
private $compare = null;
public function __construct($post) {

$this->post = (array)$post;
$this->convert();

$DE = new DefExp($this-> login); // логин
$DE -> check('[а-яa-z_-]+', 'iu')
->
isEmpty('Пустой логин!');

$DE = new DefExp($this-> password); // пароль
$DE -> check('^.+$', '')
->
isEmpty('Пустой пароль!');

$DE = new DefExp($this-> name); // имя
$DE -> check('^[a-zа-я_-]{2,}$', 'ui')
->
isEmpty('Пустое имя!');

$this->comparePass();
DataBase::addUser();
showErrors();
}
private function convert() {

foreach($this->post as $k=>$v) {
$this->$k = array($k, $v);
}
}

private function comparePass() {
if($this->password[1] == $this->repass[1]){
$this->compare = true;
}
}
}


Спустя 38 минут, 42 секунды (14.06.2010 - 12:33) web-monster написал(а):
Жесть)

Спустя 11 часов, 17 минут, 41 секунда (14.06.2010 - 23:50) Ice написал(а):
ну, а чего ты хотел? Класс, он на то и класс, чтоб скопипастил его и он сразу же начал работать на/в (нужное подчеркнуть) другой системе без всяких доделок. Когда применяешь ООП, надо иметь четкое представление о том, нужно ли это. Насколько гибок и масштабируем должен быть код. Если такой задачи не стоит, то ООП нахрен не нужно

Спустя 50 минут, 36 секунд (15.06.2010 - 00:41) Greg1978 написал(а):
Мда, то же говнокод,
здесь мы и логику проводим,
здесь же и валидатор,
здесь мы и модель создаём,
здесь мы и выводим html код, хотя бы даже если он и выводит сообщение об ошибке.
Я представляю если мне захочется добавить более подробное освещение ошибки или стиль оформления это по всем классам лазить и менять код.

Спустя 8 минут, 2 секунды (15.06.2010 - 00:49) Greg1978 написал(а):
прикольно, дубляж а зачем
Error::getErrors();
Error::$errors

Спустя 7 минут, 58 секунд (15.06.2010 - 00:57) Ice написал(а):
я ж намекнул, что класс не был дописан. Дубляж был сделан чисто случайно. а то что вся модель реги собрана в одном месте - не должно пугать.

Спустя 15 минут, 47 секунд (15.06.2010 - 01:13) Greg1978 написал(а):
Дак вот именно что модель смешана с логикой регистрации и логикой валидации, если посмотреть здесь фигурирую три класса абстрактных данных,
класс пользовательской регистрации самой
класс связующийся с БД сама модель
и класс валидации
ну конечно класс ошибок

Спустя 9 минут, 36 секунд (15.06.2010 - 01:22) Ice написал(а):
Вы имеете ввиду, что нужно разнести все по классам, а пока здесь это все в голом виде, правильно я Вас понял?

Вот только не приложу, как можно обыграть это

$DE = new DefExp($this-> login); // логин
$DE -> check('[а-яa-z_-]+', 'iu')
->
isEmpty('Пустой логин!');
. . .


Кажется, то, что есть сейчас, вполне удобно и можно оставить без изменений.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.