ФорумПрограммированиеPHP для идиотов → Фреймворки

Фреймворки

  • Sinkler

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

    Spritz 2 июля 2010 г. 13:17, спустя 3 часа 35 минут 14 секунд



    - ACL (Zend_Acl)

    как хранить это в базе? в сериализованном виде?)


    База три таблицы - роли, ресурсы, привилегии. Запрос на страницу или любой другой объект приложения - это доступ к ресурсу - один запрос к базе и ACL шустренько собирается. Что сложного?

    а есть примеры готовые простенькие? хочу сравнить с ацл в кейке
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 2 июля 2010 г. 14:00, спустя 42 минуты 35 секунд


    public function getAclForGroup($groupName)
    {
    $cache = Zend_Registry::get('Zend_Cache');
    $result = null;

    if (!($result = $cache->load($groupName))) {

    $select = $this->getAdapter()->select();

    $select->from('resources', array('privileges.mode', 'resources.name'))
    ->joinLeft('privileges',
    '`resources`.`id` = `privileges`.`resource`', array())
    ->joinLeft('groups',
    '`groups`.`id` = `privileges`.`role`', array())
    ->where("`groups`.`name` = ?", $groupName)
    ->orWhere("`groups`.`name` is null");

    $result = $this->getAdapter()->fetchAll($select);

    $cache->save($result);
    }


    $acl = new Zend_Acl();
    $acl->addRole(new Zend_Acl_Role($groupName));

    foreach ($result as $resource) {
    $acl->addResource(new Zend_Acl_Resource($resource['name']));
    }


    foreach ($result as $resource) {
    if ($resource['mode'] == 'allow') {
    $acl->allow($groupName, $resource['name']);
    }
    }

    return $acl;
    }


    Старый еще код, но это как пример
  • Sinkler

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

    Spritz 2 июля 2010 г. 14:04, спустя 4 минуты 20 секунд

    ну примерно то же самое
    $select->from('resources', array('privileges.mode', 'resources.name'))
    ->joinLeft('privileges',
    '`resources`.`id` = `privileges`.`resource`', array())
    ->joinLeft('groups',
    '`groups`.`id` = `privileges`.`role`', array())
    ->where("`groups`.`name` = ?", $groupName)
    ->orWhere("`groups`.`name` is null");

    вот никогда не понимал вот таких конструкций… в кейке просто делаешь файнд модели, все связанные модели автоматом джойнятся и попадают в выборку. если не надо или надо уменишить "глубину", варьируем своиством модели recursive
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 2 июля 2010 г. 14:08, спустя 3 минуты 43 секунды

    в кейке просто делаешь файнд модели, все связанные модели автоматом джойнятся и попадают в выборку.

    потому что там ORM а не хуй собачий Query Builder

    krasun, хм. А поддержка наследованния ролей есть?)
            $acl->addRole(new Zend_Acl_Role($groupName)); 

    смущает это, вроде как нет?
  • Sinkler

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

    Spritz 2 июля 2010 г. 14:12, спустя 3 минуты 53 секунды

    А поддержка наследованния ролей есть?)

    в кейке нет, но таблицы ролей и объектов доступа - деревья, можно создать группу с определенными правами и добавлять в неё кого надо
    Спустя 14 сек.
    или что надо
    Спустя 9 сек.
    ну вы поняли)))
    Спустя 65 сек.
    конец рабочей недели, которую закончил прогером (уже даже официально) праздную))))
  • adw0rd

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

    Spritz 2 июля 2010 г. 18:42, спустя 4 часа 30 минут 44 секунды

    Sinkler, поздравляю, а я закончил отпуском )
    adw/0
  • VaseninM

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

    Spritz 2 июля 2010 г. 18:47, спустя 4 минуты 33 секунды

    Уругвай-Гана это нечто. Суарес герой УРУГВАЯ БЛЯ))))
    ошибся темой)
  • Sinkler

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

    Spritz 2 июля 2010 г. 18:46, спустя 23 часа 58 минут 45 секунд


    Sinkler, поздравляю, а я закончил отпуском )

    у, круть))))) хорошего отдыха тебе))))
    Спустя 30 сек.
    SpartakuS, дом флудера не тут))))
    Спустя 53 сек.
    матч, кстати, не очень понравился, хотя суарес действительно был охуенен
  • VaseninM

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

    Spritz 2 июля 2010 г. 18:46, спустя 5 секунд

    Блин, ошибся))))
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 2 июля 2010 г. 20:01, спустя 1 час 15 минут 28 секунд


    в кейке просто делаешь файнд модели, все связанные модели автоматом джойнятся и попадают в выборку.

    потому что там ORM а не хуй собачий Query Builder

    krasun, хм. А поддержка наследованния ролей есть?)
            $acl->addRole(new Zend_Acl_Role($groupName)); 

    смущает это, вроде как нет?

    наследование есть

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