ФорумПрограммированиеPHP для идиотов → Основа CMS

Основа CMS

  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 6:39

    К обсуждению:

    В качестве основы основы сайта использую следующие модули:

    Регистрация.
    Авторизация.
    Правовой контроль.

    Регистрация - процесс довольно простой:

    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
    }
    ?>



    Собсно, жду мнений и предложений.
    Спасибо.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 6:49, спустя 10 минут 1 секунду

    Что подразумевается под "модулями"?
    Возможно наличие модуля "регистрация" без модуля "авторизация"?
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 6:51, спустя 2 минуты 1 секунду

    у меня модуль авторизация включает в себя и регистрацию и восстановление пароля и собственно авторизацию
    все умрут, а я изумруд
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 6:53, спустя 1 минуту 52 секунды

    да вобщем то разные файлы-контроллеры со своими функциями. в принципе [если извратиться] то можно позволить регистрироваться, но закрыть доступ ко входу в систему удалив контроллер или закрыв к нему доступ. это принципиально?
    Собсно - 3 разных по назначению набору функций использующих одни и теже таб. в БД. Это все что их связывает.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 6:54, спустя 40 секунд

    восстановление пароля - у меня отдельный контроллер. его может и не быть
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 20 августа 2008 г. 7:18, спустя 24 минуты 32 секунды

    у меня модуль авторизация включает в себя и регистрацию и восстановление пароля и собственно авторизацию

    Тоже. Не вижу смысла разделять.
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 7:20, спустя 1 минуту 18 секунд

    md5 правду говорит
    так как эти три страницы в любом случаи доступны без регистрации


    Существует глобально видимая функция USER()

    я думал ты с объектами работать будешь…

    которая возвращает массив данных

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

    echo to_action('cabinet','enter', 'Кабинет')._BR_; 


    а что это за конструкция?
    типа функция вернет объект со свойством _BR_ которое ты печатаешь? типа прикольный вывод обрыва строки?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 8:14, спустя 54 минуты 11 секунд

    типа прикольный вывод обрыва строки?
    xD
    adw/0
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 8:38, спустя 23 минуты 57 секунд


    md5 правду говорит
    так как эти три страницы в любом случаи доступны без регистрации

    мне удобней по разным файлам. более ответить нечего. не думаю что это принципиально.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 8:39, спустя 1 минуту 14 секунд

    я думал она вернет список доступных пользователю экшенов $guest_sanctions

    расскажи как получаеться этот массив
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 8:42, спустя 2 минуты 52 секунды

    Ну вот еще что есть в листинге выше

    // По id пользователя найти Логин, Email, оставшееся время доступа
    function user_info_for($user_id= NULL, $access_key= NULL){
    /*
    Из трех таблиц __Users, __Emails, __Access_key найдем
    1) Логин пользователя по данному id
    2) Email по данному id пользователя
    3) TTL (время жизни учетки для данного id и access_key)
    */
    $quary="
    SELECT
    ".__Users.".Login as login,
    ".__Emails.".Email as email,
    ".__Access_key.".TTL as ttl
    FROM ".__Users.", ".__Access_key.", ".__Emails."
    WHERE
    ".__Users.".Id= '$user_id' AND
    ".__Access_key.".User_Id= '$user_id' AND
    ".__Access_key.".Rnd_Key= '$access_key' AND
    ".__Emails.".Id= ".__Users.".Email
    ";
    $res= db_query($quary);
    $res= res2array($res);
    if(isset($res[0])) return $res[0];
    return NULL;
    }
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 8:47, спустя 4 минуты 46 секунд

    мне непонятно, почему мыла в отдельной таблице?
    все умрут, а я изумруд
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 8:48, спустя 1 минуту 35 секунд

    еще раз повторяю ворпрос

    как ты получаешь вот этот массив экшенов и разрешений


    $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
           )
       );
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 20 августа 2008 г. 8:49, спустя 34 секунды

    мне непонятно, почему мыла в отдельной таблице?

    Это преступление против ПХП сообщества? :)
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 20 августа 2008 г. 8:49, спустя 40 секунд

    мне непонятно, почему мыла в отдельной таблице?

    секурность, хуле

Пожалуйста, авторизуйтесь, чтобы написать комментарий!