Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите начинающему в ООП 
:(
    Опции темы
depodimon
Дата 14.6.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



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

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

Код

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 равна админ или ещё кто.. Как туда их передать?
PM MAIL   Вверх
ksnk
Дата 14.6.2010, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



вариантов - тучи. Один из достаточно кошерных - такой:
-- заучить магические заклинания синглтон и фабрика. 
-- Этот самый объект access переписать как singleton. чтобы всегда существовал только один вариант этого объекта.
-- написать фабрику объектов, которая будет выдавать access по запросы access. Этот пункт может показаться тавтологией, но если кроме access фабрика будет порождать все многообразие объектов приложения - кажимость понемногу начинает развеиваться ;)
-- в объект access вставить метод getUser, который будет выдавать ассоциированный массив информации о зарегистрированном юзере.

Итого - в классе TopMenu можно добратья до access, вызывая фабричный метод, а у этого access всю нужную информацию получим одним вызовом.
Если есть настоятельная потребность (свербит где-то в области javа'ы  smile ) - можно дописать getter'ов и setter'ов для объекта access, чтобы не завязываться на структуру массива, но в моей практике настолько ООПнутых решений не встречалось.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Vasay
Дата 14.6.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



Цитата

Код

    $logpass=$_COOKIE['pass'];



хранить пароль юзера в куках недопустимо. Это дыра в безопасности.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
gta4kv
Дата 14.6.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Зачем  "true", "false" у вас текст?
PM MAIL   Вверх
depodimon
Дата 14.6.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



не знаю, правильней наверно сделать 1 и 0 просто false и true наглядней)
Можете показать как будет правильно выглядеть этот код? Чтобы знал на что ориентироваться в дальнейшем! smile 
PM MAIL   Вверх
Vasay
Дата 14.6.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



Цитата

не знаю, правильней наверно сделать 1 и 0 просто false и true наглядней)


Между false и "false" две большие разницы. Так как во втором случае это строка.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
depodimon
Дата 14.6.2010, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



ну да как строка определяется) Вообщем сейчас передо мной стоит такая цель, сделать переменную которая хранит true или false ну или 1 или 0 и чтобы я мог её вызывать с других классов! Ну и было правильно сделано! На процедурном работает хорошо всё а на ООП я только начал и пока не догоняю(  Помогите пожалуйста!
PM MAIL   Вверх
Vasay
Дата 14.6.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 1
Всего: 73



depodimon
Цитата

Ну и было правильно сделано! 



Правильно для таких случаев использовать тип boolean ( http://php.net/manual/en/language.types.boolean.php ), а не строки.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
depodimon
Дата 14.6.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 27.10.2009

Репутация: нет
Всего: нет



Ок, переделаю) а вот с фабриками и синглтонами не понял. Почитал что возвращает один экземпляр класса, а на моём примере как это будет выглядеть?

Это сообщение отредактировал(а) depodimon - 14.6.2010, 23:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0938 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.