Как мне реализовать свой ACL в веб-приложении?
Я думал о веб-приложении, которое собираюсь начать разрабатывать, и думаю, можно ли улучшить мой обычный подход.
В моих последних нескольких приложениях я создал таблицу (см. Ниже) ролей (таких как CREATE POST
, EDIT POST
и т.д.) к каждому из которых применено битовое поле, поэтому я могу просто назначить пользователю определенные права при регистрации и проверить их позже (например, $user->hasRight(CREATE_POST)
).
Мне интересно, есть ли лучший подход к этому. Это, конечно, сбивает с толку, когда права конкретно не связаны с пользователем (у меня может быть таблица, в которой каждое право представляет собой логический столбец, но это звучит лишь как небольшое улучшение) - и что произойдет, если я что-то изменит вокруг?
Я не собираюсь использовать стандартные библиотеки (само приложение для меня - это учебный опыт: использование postgresql, git и т. Д.), Хотя я совершенно рад получить от них вдохновение для создания своих собственных - поэтому, если вы думаете, что-то особенное Я должен взглянуть на, пожалуйста, так сказать:)
5 ответов
Это в основном тот же подход, который я использую в своих собственных веб-приложениях (и для меня это было сделано методом проб и ошибок). Единственное отличие состоит в том, что я, вероятно, буду использовать таблицу с разными разрешениями в виде столбцов, так что если вы захотите добавить дополнительные разрешения позже, вы можете это сделать. Использование битов в целых числах ограничивает вас фиксированным числом разрешений, а именно столько битов, сколько в целом числе. Обычно это 32, что, я полагаю, вполне достаточно, но я предпочитаю не ограничивать себя таким образом.
Что бы это ни стоило, это также модель, которую использует phpBB (разрешения в качестве столбцов таблицы), и, если она достаточно хороша для, пожалуй, самого популярного веб-приложения на PHP, она, вероятно, достаточно хороша для вас;-)
Вы можете взглянуть на документацию Spring Security (ранее Acegi), которая широко используется в среде ACL Java.
Документация является исчерпывающей, а также описывает различные соображения, сделанные при разработке аутентификации и авторизации ботов. Даже без использования Java это достойно чтения.
Вы можете просмотреть страницу указателя, чтобы получить обзор и представление о том, что Acegi делает (и не делает). Вы также можете пропустить прямо к концепции авторизации или даже к схеме базы данных.
Подходы ACL в веб-приложениях, в общем, обсуждались, например, здесь.
Я уверен, что вы уже нашли phpgacl, но вот ссылка, если вы этого не сделали. Поначалу может быть немного сложно обернуть голову, и, конечно, библиотека сложна (трудоемка) для реализации в проекте, но документация и демонстрация - ОТЛИЧНЫЕ ориентиры.
Zend Framework имеет ACL, который похож на то, что вы пытаетесь сделать.