ACL-компонент Cake и понятие «владение» - PullRequest
3 голосов
/ 06 августа 2010

Я возился с компонентами Cake Auth / ACL.Я прочитал документы и сделал урок, но я все еще не удовлетворен тем, что я могу на самом деле сделать с ним.Я видел пару из других подходов, но я не могу сказать, поскольку у меня действительно есть прямой победитель с любым из них.В любом учебном пособии / сообщении в блоге / документе, которое я прочитал, случай использования «владения» не совсем достаточно освещен.

Я надеялся описать свой вариант использования, и если есть кто-то, кто может предложить подход, я весь в ушах, иначе я мог бы просто попытаться что-то сделать сам; o)


Это в основном имитирует простой набор кабинетов доктора.

Начинается достаточно легко для ARO:

  • Группа 1: администраторы (конечно)
  • Группа 2: смотрители
  • Группа 3: участники

Между группами и пользователями существует отношение hasOne (то есть пользователь может принадлежать только к одной группе).

Теперь мы используем ACO с древовидной структурой, например Эйдан Листер считает :

/root
    /practice
        /practice_profile
        /practice_updates
        /patients
            /entries
            /profiles
            /other_things

Каждый смотритель будет иметь доступ к практике, включающей егопациентов.Это дает смотрителю доступ ко всему, что пишет пациент.Кроме того, пациент ТОЛЬКО сможет видеть / редактировать / и т.д. ... все, что ему принадлежит.Это не было конкретно отражено ни в одном написанном мною тексте.Я знаю, что с типами разрешений файловой системы это является обычным делом, но я даже не хочу идти по этому пути ...

С Auth / ACL в ядре Cake, он на самом деле не получает такие разрешения, какэтот.Кажется, он говорит: «Ну, если вы являетесь частью группы X, тогда вы можете выполнять функцию Y».Следовательно, кажется, что любой пользователь, принадлежащий к группе members, будет иметь доступ ко всем материалам других участников, а все caretakers будут иметь доступ ко всем методам.

Кто-нибудь еще сталкивался с подобнымвариант использования?Любые предложения для дальнейшего чтения?Любые известные решения?

РЕДАКТИРОВАТЬ: Таким образом, все ответы были отличными, так что все вокруг проголосовали.Я настоятельно рекомендую посмотреть на пост, который я не нашел, предоставленный bancer, так как в итоге он указал мне на некоторые интересные вещи.В конце концов, хотя ответы были спрятаны в документах, я просто не совсем понял, как в первый раз.Кроме того, был момент, когда я прочитал ссылку cakeqs .Так что ответ идет к Вениамину.

Ответы [ 2 ]

1 голос
/ 07 августа 2010

Я не видел ни одной ссылки на этот другой вопрос переполнения стека о ACL, который предлагает добавить новую запись в actionMap, "editown"

editown

1 голос
/ 06 августа 2010

Может быть, это вдохновит вас. Это выдержка из таблицы acos для CMS, которую я разработал. Используя явно неиспользуемый столбец model, я получаю дополнительный уровень контроля, который позволяет мне настроить доступность страниц.

 id    parent_id  model  foreign_key  alias          lft  rght
 1462  1176       page   NULL         about-us       285  286 #display page url
 1515  1176       page   NULL         leo-test       291  292 #display page url
 1195  1176       NULL   NULL         ajaxSetStatus  261  262 #function
 1194  1176       NULL   NULL         walkTree       259  260 #function

Затем я делаю что-то подобное в контроллере, чтобы проверить, есть ли у текущего пользователя разрешение на просмотр запрошенной страницы (по умолчанию пользователь имеет значение «Аноним», если не вошел в систему):

function view($url=null)
{
    $nD = $this->NodeDescriptor->findByUrl($url);
    if(!$nD) $this->redirect(array('action'=>'error'));
    $user = ($this->Auth->user())?$this->Auth->user():'Anonymous';
    if(!$this->Acl->check($user,"{$url}"))
        $this->redirect($this->referer());
 ...
...