Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > CodeIgniter 2, Авторизация


Автор: WolfAlone 31.3.2011, 10:09
Доброго времени суток! Не так давно, вышла вторая версия популярного в определённых кругах фреймворка CodeIgniter 2. Волей случая, мне пришлось столкнуться с этой версией FW, что бы внести некоторые доработки в уже готовый проект. Проект крайне нуждается в возможности производить авторизацию пользователей, хотя бы на базовом уровне с разделением "админ/не админ".

Возможно, кто-то знает рабочее, готовое решение для авторизации, совместимое с CI v.2? Подскажите пожалуйста, если таковое имеется.

P.S. Если будет возможность назначить пользователю группы или роли и доп. плюшки - будет вообще замечательно!

Автор: MoLeX 31.3.2011, 10:26
а на русскоязычном портале не смотрел? раньше там были решения для младших версий, может и для новой тоже есть

Добавлено через 31 секунду
http://code-igniter.ru/forum/
http://code-igniter.ru/wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0

Автор: StachelDraht 31.3.2011, 10:49
http://codeigniter.com/wiki/Category:Libraries::Authorization/

точно что нибудь найдешь

Автор: WolfAlone 31.3.2011, 11:03
StachelDraht, большинство библиотек на указанной выше странице безнадёжно устарело и не совместимы с версией 2.

Автор: StachelDraht 31.3.2011, 11:12
тогда своими руками авторизацию на CI организовать очень не сложно и быстро, либо переделать библиотеку из вышеуказанного списка под CI2

Автор: WolfAlone 31.3.2011, 11:14
StachelDraht, видимо, придётся сделать одно из выше перечисленного, либо вообще переделать проект на другом фреймворке, поддерживающим авторизацию "из коробки" (благо, проект не большой, хоть это радует).

P.S. Может быть, кому-то известны "имена" (названия) уже готовых решений, совместимых с CI v.2?

Автор: StachelDraht 31.3.2011, 11:25
WolfAlone, ИМХО быстрее всего будет написать своими руками, чем переписывать под другой фреймворк. Хотя может быть твоя задача без проблем решиться с помощью скаффолдинга, например на yii.

Автор: WolfAlone 31.3.2011, 11:43
Если я правильно понял, исходя из тут написанного: http://ru.wikipedia.org/wiki/%D0%A1%D0%BA%D0%B0%D1%84%D1%84%D0%BE%D0%BB%D0%B4%D0%B8%D0%BD%D0%B3, то скаффолдинг - это то, что Yii представляет из себя генерацию моделей, вью, контроллеров и т.д., с помощью консоли?

Но, меня заинтересовало несколько другое. Там же, среди прочих указан и CodeIgniter. Скажите пожалуйста, у CI тоже есть встроенная авто генерация кода?

Добавлено через 6 минут и 29 секунд
Нашел описание, судя по всему это "Мини phpMyAdmin" для CI. Для CI - не интересно...

Добавлено через 9 минут и 15 секунд
CI - такой хороший проект был (как мне вначале показалось) и так резко "встал одной ногой в могилу".

Автор: WolfAlone 31.3.2011, 12:25
Может быть ещё кому пригодиться. Нашёл библиотеку (судя по всему) совместимую с CodeIgniter 2. Называется Ion Auth. На счёт "качества" пока ничего не скажу, т.к. пользуюсь ей только 5мин., но по крайней мере:
1. Она уже подаёт признаки жизни (работает)
2. Имеет (*после беглого обзора) достаточно подробное руководство пользователя (на английском языке)

P.S. Если кому-то известны ещё какие-либо варианты - с удовольствием их выслушаю.

Автор: StachelDraht 31.3.2011, 12:57
Цитата

то скаффолдинг - это то, что Yii представляет из себя генерацию моделей, вью, контроллеров и т.д., с помощью консоли?

уже и через web

Цитата

CI - такой хороший проект был (как мне вначале показалось) и так резко "встал одной ногой в могилу". 

категорически не согласен!  smile 

За все то время, пока мы ведем тут дискуссии, уже можно было написать полноценную авторизацию на CI 

Автор: WolfAlone 31.3.2011, 13:48
StachelDraht, Время протекания нашей дискуссии порядка 6-и часов (грубо). Представляете, сколько уже можно было написать, не только систем авторизации, но и других полезные плюшек для CodeIgniter'a (даже версии 2) за то время с которого он существует?  smile Глядишь, тогда бы ему не так быстро крышку бы заколачивали...

P.S. Ion Auth по ходу дела "зажигает". Как "обновить" пользователя - я нашёл, как зарегистрировать пользователя в нужную группу - я нашёл, а вот как изменить группу пользователю... Судя по всему, средствами самого модуля - никак smile 

Автор: StachelDraht 31.3.2011, 13:50
WolfAlone, если до конца разберешься, ждем от тебя документации =)

Автор: WolfAlone 31.3.2011, 14:00
StachelDraht, Нет проблем! Только, скорее не документации, а перевода на русский (тоже без вопросов, если оно того стоит), ибо документация на него есть и даже оформлена точь в точь как дока по CodeIgniter.

Добавлено @ 14:03
Скажите пожалуйста, CodeIgniter Reactor - это что за зверь? В справке написано, что это Community Driven версия CI. Я так понял, это версия CI от сообщества? С ней кто-нибудь работал? Может быть там есть какая-нибудь более ли менее человеческая плюшка для авторизации, совместимая с CI v.2?

Если кто-нибудь в двух словах подскажет, в чём ключевое отличие Reactor'a от обычного CI v.2 и есть ли в нём "авторизация из коробки" - буду примного благодарен!

Автор: WolfAlone 31.3.2011, 14:42
Больше всего поражает тот факт, что огромное количество людей (как выяснилось) используют CI и, судя по всему мало кто из них когда-нибудь задавался вопросом авторизации  smile 

Автор: StachelDraht 31.3.2011, 14:49
Цитата

Больше всего поражает тот факт

чем вас поражает этот факт?

Думаю что вопросом авторизации задавались многие, и решали этот вопрос в течении часа используя сессии и  md5

Автор: WolfAlone 31.3.2011, 15:25
StachelDraht, по моему скромному разумению FW предназначен прежде всего для облегчения (ускорения) разработки путём решения типичных задач на уровне самого FW. Видимо, по мнению разработчиков CI, авторизация - это не типичная задача. Но, разговор собственно не об этом. 

Решение вопроса авторизации на уровне сессий и шифрования - это конечно решение! Но звучит оно на мой взгляд не совсем легитимно. Это примерно как на вопрос "где взять драйвер для принтера XXX" ответить: "попробуй воспользоваться C++ и Ассемблером. Многие так и решили эту задачу в течении недели".

Если исходить от обратного, то разумеется своя собственная система авторизации будет гораздо "тоньше", чем 99% имеющихся, и гораздо лучше подходящая под конкретные (в данным случае мои) нужды. Но если следовать по такому пути, то сначала мы получим собственную систему авторизации. Потом мы получим свой собственный FW, потом свой собственный язык, потом вообще перейдём на низкоуровневое программирование (С++, ассемблер), потом получим свой протокол, предназначенный для решения узкоспециализированной задачи, потом процессор и компьютер по этой же стезе изобретём свой, и закончим на "производстве" людей на генном уровне, предназначенных для решения узкого спектра задач  smile 

Это я собственно к тому, что можно было бы давным давно, за час (а тем более за 6 часов!) написать свою собственную авторизацию... Но вопрос, опять же, в другом. Почему до сих пор этого никто не сделал? FrameWork кто-то сделал, выложил в общественное пользование, занимается его поддержкой и т.д. и т.п., а вот систему авторизации человеческую, для данного FW точно такая же учесть почему-то не постигла... Именно это меня и удивляет.

P.S. Надесь, кого-нибудь улыбнуло.  smile 

Автор: StachelDraht 31.3.2011, 16:14
мне кажется вам стоит посмотреть в сторону cmf или даже cms

framework, думается мне, создан для облегчения работы программиста, а не выдавать готовый проект по одному клику

Автор: WolfAlone 31.3.2011, 16:55
StachelDraht, разработка всех необходимых модулей для конкретной CMF или даже CMS - дело гораздо более трудозатратное чем написание такого же проекта на базе FW. И, к тому же, требующее изучения дополнительных тех. материалов, что влечёт ещё большие не оправданные в данном случае трудозатраты.


Цитата(StachelDraht @  31.3.2011,  16:14 Найти цитируемый пост)
framework, думается мне, создан для облегчения работы программиста, а не выдавать готовый проект по одному клику 

Разьве мною было где-то было упомянуто о готовом проекте в один клик? Я говорил лишь о том, что с точки зрения разработчков CI, авторизация - это не типичная задача (и всё из этого вытекающее).

Автор: Muerto 31.3.2011, 17:51
Авторизация как раз самая типичная задача типичней нету  smile 

в CI все для этого есть, велосипеды не нужны

Автор: WolfAlone 31.3.2011, 18:59
Muerto, примерно это я и хотел сказать. Если быть совсем кратким и говорить совсем прямо, я хотел сказать только два предложения:
1. "Из коробки" CodeIgniter не поддерживает авторизацию (разработчики этого не предусмотрели по неведомой причине)
2. "Готовые" решения, на самом деле не такие уж и готовые, как хотелось бы... а учитывая количество народу которое пользуется CodeIgniter... отсутствие на сегодняшний день общепризнанного модуля авторизации для него... - выглядит дико в моих глаза.

Автор: Muerto 31.3.2011, 19:19
WolfAlone, Вам никакой фреймворк не даст на 100% готовый модуль...
Во всех фреймворках есть средства сделать это...
В ZF есть Zend_Auth в Yii тоже есть не помню как называется...
Но это не решения "из коробки", которые можно просто так взять и все готово...

Авторизацию вы будете делать намного быстрей в CI чем в ZF , не смотря на готовый класс...

Это потому что CI очень прост...

Суть фреймворка облегчить разработку и уберечь разработчика от изобретения велосипедов, что позволяет сосредоточится на самом продукте а не на общих линиях которые есть в каждом проекте...
Дать какие то общие правила игры, которые помогут найти общий язык и общие правила в команде разработчиков...

Я к примеру когда свой велосипед писал тратил больше времени на велосипед чем на сам проект(всегда появляются идеи как улучшить , хочется изменить и тп.)...

Если хотите "все" готовое - таки нужно в сторону CMS смотреть...


Автор: WolfAlone 31.3.2011, 19:48
Muerto, я уже ощутил всю пользу (и вред) от фреймворков, а так же от CMF, CMS и большинства других готовых решений (например ОС, IDE и пр.).

Просто на мой взгляд, не добавить авторизацию в "коробку" с ФВ - это всё равно, что не добавить Paint в комплект поставки Windows 98 по тому, что он очень простой. К тому же, скачать из интернета какой-нибудь аналог Paint гораздо проще, чем изучить Photoshop. Это всё само собой разумеется...

Но вопрос опять же, не в этом. Вы себе представляете виндовс без рабочего стола, по тому, что он очень прост? И комплект рабочих столов к нему, которые подходили бы только для Win9.x, а для Win XP/7 уже не подходят, т.к. 99% из них безнадёжно устарели? Разумеется, можно изобрести свой рабочий стол для виндовса, и даже не 1, а 10, 20, 100...

Но должно же быть какое-то стандартное, общепризнанное решение этой, на мой взгляд весьма тривиальной задачи, к тому же в столь популярном продукте! То, что он очень прост - я ни в коем случае не отрицаю, но по моему авторизацию пользователей можно было бы изобрести (разработчикам хотя бы) за столько лет существования ФВ, и не мотивировать её отсутствие тем, что ФВ очень прост. Его простота говорит о том, что авторизация пользователей крайне редко бывает необходимой? В нём достаточно мусорных (и просто редко используемых) модулей, а столь нужного - нет.

Если поставить вопрос ребром, то звучать он будет примерно так: почему, за столько лет существования фреймворка разработчикам не пришло в голову сделать модуль авторизации???

P.S. На мой взгяд ключевая польза вот ФВ во время командной разработки в том, что каждый может делать какую-то его часть, при этом не мешая другим и не зависимо от них (коллег). Хотя с некоторой долей "дисциплины" - не могу не согласиться, впрочем как и с тем, что они реально позволяют сосредоточиться больше на самом проекте, чем на решении тривиальных задач.

Автор: StachelDraht 31.3.2011, 20:21
у вас есть шанс написать этот самый класс авторизации, отправить его разработчику, и все мы будем с удовольствием его использовать (возможно)

Цитата

 почему, за столько лет существования фреймворка разработчикам не пришло в голову сделать модуль авторизации???

codeigniter.com - сайт разработчика, лучше просить у них

Автор: WolfAlone 31.3.2011, 20:41
StachelDraht, на счёт шанса написать - я уже подумал. Уже начеркал небольшую модель для простейшей авторизации админ/не_админ. На разработку всего, ушло минут 40  smile 

Но, отсутствие такой библиотеки в стандартном комплекте поставки меня не перестало удивлять  smile

Добавлено через 1 минуту и 51 секунду
Цитата(StachelDraht @  31.3.2011,  20:21 Найти цитируемый пост)
codeigniter.com - сайт разработчика, лучше просить у них 

боюсь, что ответа придётся ждать столько же, сколько приходиться ждать новую версию CodeIgniter'a.

P.S. Кто-нибудь может, что за CI "Reactor", отличия и пр. (ключевые моменты)?

Автор: Muerto 31.3.2011, 21:19
WolfAlone, В CI есть все средства, создайте модель авторизации, и пользуйтесь.

Вы путайте роли FW и CMS

Вариантов реализации авторизаций ,разделения прав, групп пользователей просто бесконечность.

Не возможно дать что то одно что будет правильно всегда...
Если давать вариант который работает из коробки вам нужно давать тогда и структуру базы, и форму может авторизации и регистрации...

Фреймворк здесь не причем. качайте CMS и будет как раз то что вам нужно.

FW дает базовый функционал, нельзя удовлетворить все нужды... он тогда гигабайты весить будет...

НО зато есть всегда масса дополнений и готовых примеров

Автор: StachelDraht 31.3.2011, 22:18
WolfAlone, ждем от вас готовое универсальное решение

Автор: WolfAlone 1.4.2011, 08:52
Цитата(StachelDraht @  31.3.2011,  22:18 Найти цитируемый пост)
WolfAlone, ждем от вас готовое универсальное решение 
 обещать не буду, но если не уйду на другой ФВ и доработаю авторизацию для этого - обязательно выложу в общий доступ.

P.S. Всем спасибо за конструктивную дискуссию!

Автор: help18 2.4.2011, 14:51
Если необходима не сложная авторизация для админки - это можно сделать самостоятельно, буквально за пол-часа времени. 
Рекомендую видео-курс "Науменко Д. - PHP и CodeIgniter с нуля 2010": там в доступной форме, на примере админской части блога показывается как это сделать.


Автор: pobednov 3.6.2011, 00:45
Авторизация для CI 2.0* за 5 минут:

1)в базе создаем табличку 'admins' с двумя полями = login и passwd

2)в папке models создаем файл auth_mdl.php со следующим содержанием:

Код

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * @author [$username]
 * @copyright [$day][$month][$year], [$time]
 */
class Auth_mdl extends CI_Model {
    function __construct()
    {
        parent::__construct();
    }
    function auth(){
       if (!isset($_SERVER['PHP_AUTH_USER']))
{
        Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
}
else {
        if (!get_magic_quotes_gpc()) {
                $_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
                $_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
        }
            $this->db->from('admins')->where('login', $_SERVER['PHP_AUTH_USER']);
            $lst = $this->db->get();
        if (!$lst)
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
        Header ("HTTP/1.0 401 Unauthorized");
        exit();
        }
        if ($lst->num_rows($lst) == 0)
        {
           Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }
        $pass =  $lst->row_array();
        if ($_SERVER['PHP_AUTH_PW']!= $pass['passwd'])
        {
            Header ("WWW-Authenticate: Basic realm=\"Admin Page\"");
           Header ("HTTP/1.0 401 Unauthorized");
           exit();
        }
}
    }
}
?>



3) в файле config/autoload.php прописываем модель : $autoload['model'] = array('auth_mdl');
не забудьте предварительно подключить базу данных...

4) в контроллере перед $this-load->view('имя_отображения_нуждающегося_в_ограниченном_доступе'); 
вставляем следующее: $this->auth_mdl->auth();

ВСЕ ДЕЛА)))

Это изрядно устаревшая схема, но подключается за 3 минуты. 

Автор: WolfAlone 7.6.2011, 20:27
Авторизацию уже написал свою, всем спасибо за внимание!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)