Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="ztalker"]короче, нарыл следующее... можно делать еще проще! делаем Аросы, где корнем будет User, и вложения id пользователей (пишу только алисы): [code]User 1 2 3[/code] делаем Акосы, где корнями будут имена моделей, а вложения это id элементов этих вложений (также только алисы): [code]Message 1 2 3 File 1 2 3[/code] теперь можно раздавать права и проверять следующим образом: [code]//даем доступ юзеру 1 на файл 2 $this->Acl->allow('User/1', 'File/2', '*'); //проверяем доступ изменения у юзера 3 на сообщение 3 $this->Acl->check('User/3', 'Message/3', 'update');[/code] Это работает в 1.2 для 1.1 не проверял. И так не не нашел где применяются поля 'model', 'foreign_key', в выше указанной схеме, все работает на алисах, все запросы генерируются через алисы, хотя было бы проще работать через эти поля.[/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
nws
Добавлено: 26 Мар 2008 20:23:47
Заголовок сообщения:
cyberfox
Еще как пригодится =)
cyberfox
Добавлено: 26 Мар 2008 19:33:02
Заголовок сообщения:
Вот пример работы с ARO и ACO в ACL cakePHP 1.2 Может кому пригодится:
Код:
<?php
class AclsController extends AppController{
var $components = array('Acl');
var $uses = array('Aro', 'Aco');
function init(){
$this->Aco->create();
$this->Aco->save(array(
'model'=>'',
'foreign_key'=>null,
'parent_id'=>null,
'alias'=>'AdminModules'));
$this->Aco->recursive=0;
$parent = $this->Aco->findByAlias('AdminModules');
$parentId = $parent['Aco']['id'];
$this->Aco->create();
$this->Aco->save(array(
'model'=>'Modules',
'foreign_key'=>1,
'parent_id'=>$parentId,
'alias'=>'AdminModules::1'));
$this->Aco->create();
$this->Aco->save(array(
'model'=>'Modules',
'foreign_key'=>2,
'parent_id'=>$parentId,
'alias'=>'AdminModules::2'));
$this->Aro->create();
$this->Aro->save(array(
'model'=>'',
'foreign_key'=>null,
'parent_id'=>null,
'alias'=>'Guest'));
$this->Aro->create();
$this->Aro->save(array(
'model'=>'Admins',
'foreign_key'=>null,
'parent_id'=>null,
'alias'=>'Admin'));
$parent = $this->Aro->findByAlias('Admin');
$parentId = $parent['Aro']['id'];
$this->Aro->create();
$this->Aro->save(array(
'model'=>'Admins',
'foreign_key'=>1,
'parent_id'=>$parentId,
'alias'=>'Admin::1'));
$this->Acl->allow('Admin', 'AdminModules', '*');
$this->Acl->allow('Guest', 'AdminModules', array());
}
}
?>
ztalker
Добавлено: 13 Ноя 2007 14:01:06
Заголовок сообщения:
в 1.1 эта схема не работает
ztalker
Добавлено: 13 Ноя 2007 12:40:59
Заголовок сообщения:
короче, нарыл следующее... можно делать еще проще!
делаем Аросы, где корнем будет User, и вложения id пользователей (пишу только алисы):
Код:
User
1
2
3
делаем Акосы, где корнями будут имена моделей, а вложения это id элементов этих вложений (также только алисы):
Код:
Message
1
2
3
File
1
2
3
теперь можно раздавать права и проверять следующим образом:
Код:
//даем доступ юзеру 1 на файл 2
$this->Acl->allow('User/1', 'File/2', '*');
//проверяем доступ изменения у юзера 3 на сообщение 3
$this->Acl->check('User/3', 'Message/3', 'update');
Это работает в 1.2 для 1.1 не проверял. И так не не нашел где применяются поля 'model', 'foreign_key', в выше указанной схеме, все работает на алисах, все запросы генерируются через алисы, хотя было бы проще работать через эти поля.
ztalker
Добавлено: 12 Ноя 2007 09:09:25
Заголовок сообщения:
VolCh
, больше не разбирался с ACL? На версии 1.2 работает?
ztalker
Добавлено: 08 Ноя 2007 14:40:03
Заголовок сообщения:
VolCh писал(а):
Вот только обязательно с алиасами работать для контролеров?
Исходя из имеющихся методов - да. Т.к. все методы Acl (назначение прав, проверка) в параметрах требуют алисы.
Здесь проблем не возникает, узнать контроллер всегда можно - $this->params['controller'] или $this->name.
И еще. Сегодня попробовал запустить Acl на версии 1.2, и не фига не заработало
. Создавать aco и aro методом create не хочет, даже не ругается, просто не создает. Добавлял ручками в БД и методом save (метод модели), после чего проверить права не мог, метод check дает ошибку - "неудачная проверка, aro - такой-то, aco - тако-то".
VolCh
Добавлено: 08 Ноя 2007 14:26:29
Заголовок сообщения:
Во, то что мне нужно.. Вот только обязательно с алиасами работать для контролеров?
ztalker
Добавлено: 08 Ноя 2007 08:12:01
Заголовок сообщения:
По доступу к контроллеру погорячился. Такая схема не совсем подходящая. Если у пользователя есть доступ только к одной записи модели, но нет доступа на всю модель, то в таком случае контроллер его отбреет и он не увидит доступной для него записи.
Здесь лучше организовать свою ветку aco:
Код:
all
model.all
model.message
model.message.1
model.message.2
...
model.file
model.file.1
model.file.2
...
controller.all
controller.messages
controller.messages.index
controller.messages.comments
controller.messages.view
Тут мы выиграем на том, что можем раздавать права не только на контроллер, но и на действия.
Схему не проверял, как раз этим буду заниматься.
ztalker
Добавлено: 08 Ноя 2007 07:23:15
Заголовок сообщения:
У меня версия 1.1. Решение для себя нашел. В aco просто забил на object_id и полностью использую alias.
Организовал следующую структуру в aco (указаны имена alias):
Код:
model.all
model.message
model.message.1
model.message.2
...
model.file
model.file.1
model.file.2
...
Таким образом если необходимо дать доступ на все модели, например суперадмину, то я даю ему полные права на
model.all
, если на отдельную модель, то даю
model.<name>
, если на запись -
model.<name>.<id>
.
При проверки id пользователя всегда знаю, модель тоже известна, и соответственно id запрашиваемого элемента.
Заодно определяю доступ пользователя к разделам сайта, т.е. если у пользователя нет доступа, например, к модели
post
, значит и контроллер
posts
для него закрыт.
Пока такая схема работает.
Версию 1.2. Даже еще не рассматривал.
VolCh
Добавлено: 08 Ноя 2007 00:34:34
Заголовок сообщения:
Я сейчас разбираюсь с ACL в 1.2, если у тебя 1.1 то, там вроде имя модели в таблице aco хранить нельзя и очевидных нет решений.. если только сделать еще одну таблицу куда пихать подряд id мессаг и файлов, а уж её id пихать в object_id
Для твоей проблемы решение для 1.2 вроде вот http://bakery.cakephp.org/articles/view/how-to-use-acl-in-1-2-x, довольно понятно.
А вот я что-то не могу разобраться, если ухожу от модели таблицы и доступ по действиям хочу давать. Вот только действия эти на одну таблицу или один id в таблице не завязаны и что указывать в model и foreign_id совсем не понятно, да и в parent_id тоже.
Попробую сейчас в гуглегруппе спросить буржуйской
ztalker
Добавлено: 07 Ноя 2007 06:34:14
Заголовок сообщения:
VolCh писал(а):
Вот это http://www.ibm.com/developerworks/ru/edu/os-php-cake2/section5.html читал?
Да, конечно читал. Но судя по описанию, все распределения прав и дальнейшая проверка осуществляется по алиасам. В таком случае я не вижу логики хранить id в object_id. Вот и решил, что либо дока не совсем точная, либо я совсем запутался. Вот и хочу услышать советов от людей которые уже использовали ACL.
Т.е. если следовать описанию, то мои ресурсы будут выглядеть так:
id | object_id | alias
1 | 1 | 'messages_1'
2 | 2 | 'messages_2'
3 | 1 | 'files_1'
4 | 2 | 'files_2'
при этом проверяя право, object_id учавствовать вобще не будет:
Код:
// ... здесь процедуры получения информации о файле в $fileInfo
// теперь проверяем доступ пользователя к файлу
if ($this->Acl->check($this->Session->read('user'), 'files_' . $fileInfo['id'], 'read')) {
// ...
}
Получается что поле object_id работает только тогда, когда ресурсы сложены в одну таблицу! Или всеже я заблуждаюсь?
VolCh
Добавлено: 07 Ноя 2007 00:58:48
Заголовок сообщения:
Вот это http://www.ibm.com/developerworks/ru/edu/os-php-cake2/section5.html читал?
KPOTOB
Добавлено: 07 Ноя 2007 00:43:18
Заголовок сообщения:
VolCh - расскажи чего нароеш - а то все что по ACL есть к прикрытию данных не относиться
Vlad
Добавлено: 06 Ноя 2007 21:38:25
Заголовок сообщения:
А я по-прежнему пользуюсь obAuth, с небольшими модификациями.
Создал себе 3 группы, наделал юзеров.
Добавил хелпер, который, в зависимости от группы, отображает или нет нужные элементы, ну а компонентом "прикрыл" функции контроллера.
Осталось только решить вопрос (до сих пор небыло необходимости
- юзер имеет право редактировать только свой профайл. И всё.
ACL - сложнова-то, и учитывая, традиционную нехватку времени, решил не ковырять
VolCh
Добавлено: 06 Ноя 2007 16:58:20
Заголовок сообщения:
Завтра сам с этим разбираться буду
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».