В качестве основы основы сайта использую следующие модули:
Регистрация.
Авторизация.
Правовой контроль.
Регистрация - процесс довольно простой:
1. логин, пароль, мыло, контрольные цифры
2. данные сохраняются в таблице предрегистрации
3. формируется ключ активации - отсылается пользователю
4. пользователь активирует ключ со своего мыла - данные из предрегистрации переносятся в список пользователей
Авторизация
1. Пользователь указывает логин, пароль
2. проверка
3. В случае успеха в БД в таблицу доступа заносится [рандомный 20 значный ключ + id пользователя + время актуальности ключа]
4. ключ устанавливается в куки клиента (+ время актуальности)
5. при загрузке следующей страницы проверяется соответствия ключа из Кук и БД - если совпадение, то пользователь авторизирован
6. Если ключи совпадают (т.е. пользователь авторизирован), то ключ тут же обновляется и в БД и в Куках. Так время актуальности одного ключа уменьшается. Пользователю достаточно зайти на др. страницу сайта, что бы краденый из кук ключ стал недействительным. При этом сам пользователь не должен вновь вводит данные о регистрации
7. при выходе с сайта ключ удаляется и в куках и в БД
Правовой контроль.
У меня устроено следующим образом.
Существует глобально видимая функция USER() которая возвращает массив данных:
0. id пользователя
1. Логин
2. email.
3. веремя актуальности ключа пользователя.
4. Дескриптор правового набора (например слово - 'Гость' или 'Пользователь')
5. Ассоциативный массив доступа к контроллерам->действиям
например
$guest_sanctions= array(
'basic'=>array(
'enter'=>true
),
'flash'=>array(
'flash'=>true
),
'auth'=>array(
'login'=>true,
'unlogin'=>true
),
'registration'=>array(
'reg_form'=>true,
'user_registration'=>true,
'project_connect'=>true
),
'password'=>array(
'forgotten'=>true,
'password_get'=>true
),
'activation'=>array(
'user_activation'=>true
),
'news'=>array(
'news'=>true,
'reading'=>true
)
);
Функцию можно вызвать из любого места и по ее данным принимать решения о доступе пользователя к данному действию Контроллера или о необходимости отрисовки в Виде какой нибудь ссылки:
например:
Отрисовать кнопку входа в кабинет если у пользователя есть соответствующее разрешение
<?php
// Кнопка -Кабинет-
if(isset($sanctions['cabinet']['enter']) && $sanctions['cabinet']['enter']==true){
?>
<div class="green_button">
<?php echo to_action('cabinet','enter', 'Кабинет')._BR_; ?>
</div>
<?php
}
?>
Собсно, жду мнений и предложений.
Спасибо.