Как мне реализовать свой ACL в веб-приложении?[закрыто]

StackOverflow https://stackoverflow.com/questions/546621

Вопрос

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

В своих последних нескольких приложениях я создал таблицу (см. ниже) ролей (например, CREATE POST, EDIT POST и т. д.), к каждому из которых применено битовое поле, поэтому я могу просто назначить пользователю определенные права при регистрации и проверить их позже (например, $user->hasRight(CREATE_POST)).

Мне интересно, есть ли лучший подход к этому.Конечно, это сбивает с толку, когда права не связаны конкретно с пользователем (я мог бы иметь таблицу, в которой каждое право представляет собой логический столбец, но это звучит лишь как небольшое улучшение) - и что произойдет, если я что-то изменю?

Я не собираюсь использовать стандартные библиотеки (само приложение является для меня обучающим опытом:используя postgresql, git и т. д.), хотя я очень рад черпать у них вдохновение для создания своих собственных - так что, если вы думаете, что мне стоит взглянуть на что-то особенное, скажите об этом :)

Это было полезно?

Решение

По сути, это тот же подход, который я использую в своих собственных веб-приложениях (и для меня это было сделано методом проб и ошибок).Единственная разница в том, что я бы, вероятно, использовал таблицу с разными разрешениями в качестве столбцов, так что, если вы захотите добавить больше разрешений позже, вы сможете это сделать.Использование битов в целом числе ограничивает вас фиксированным количеством разрешений, а именно количеством битов, содержащихся в целом числе.Обычно это 32, чего, я полагаю, вполне достаточно, но я предпочитаю не ограничивать себя таким образом.

Как бы то ни было, это также модель, которую использует phpBB (разрешения в виде столбцов таблицы), и если она достаточно хороша для, пожалуй, самого популярного веб-приложения PHP, то, вероятно, она подойдет и вам ;-)

Другие советы

Вы можете взглянуть на документацию Spring Security (ранее Acegi), которая представляет собой широко используемую среду Java ACL.

Документация является исчерпывающей и также описывает различные соображения, принятые при разработке аутентификации и авторизации бота.Даже без использования Java ее стоит прочитать.

Вы можете просмотреть индексная страница чтобы получить обзор и представление о том, что делает (и не делает) Acegi.Вы также можете перейти сразу к концепции авторизации или даже к схема базы данных.

Я уверен, что вы уже нашли phpgacl, но вот ссылка, если вы еще не нашли.Поначалу может быть немного сложно разобраться, и, конечно, реализовать библиотеку в проекте сложно (отнимает много времени), но документация и демонстрация являются ОТЛИЧНЫМИ ориентирами.

Общие списки контроля доступа PHP

А Zend-фреймворк имеет список управления доступом что похоже на то, что вы пытаетесь сделать.

Подходы ACL в веб-приложениях в целом обсуждались, например здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top