Я разработал библиотеку под названием PHP-Bouncer , которая, я думаю, удовлетворит ваши потребности. В настоящее время он поддерживает полностью управляемый доступ, который позволит вам использовать один вызов на каждой странице (я, конечно, рекомендую использовать включение) и автоматически перенаправлять людей, если у них нет доступа к странице, а также автоматический поиск ролей из база данных (если вы реализуете роли в БД с помощью прилагаемого сценария установки таблицы MySQL). Синтаксис довольно прост.
Вы создаете вышибалу:
$bouncer = new Bouncer();
Добавьте свои роли (вручную):
// Add a role Name, Array of pages role provides
$bouncer->addRole("Public", array("index.php", "about.php", "fail.php"));
// Add a role Name, Array of pages role provides
$bouncer->addRole("Registered User", array("myaccount.php", "editaccount.php", "viewusers.php"));
// Add a role Name, Array of pages role provides List of pages that are overridden by other pages
$bouncer->addRole("Admin", array("stats.php", "manageusers.php"), array("viewusers.php" => "manageusers.php"));
или из базы данных:
// conf_* values are set in a config file, or you can pass them in explicitly
$bouncer->readRolesFromDatabase(conf_hostname, conf_username, conf_password, conf_schema, "mysql");
Добавьте пользователя и назначьте ему несколько ролей (Примечание. Существует класс с именем BouncerUser, который может расширять ваш класс User, он предоставляет все необходимые вам функции ролей!):
$user->addRole("Logged In"); // This Role doesn't exist in the bouncer, but we can set it anyways if we feel like setting another flag on the user's account. This can be useful for displaying content in a page only if a user has a secondary role.
$user->addRole("Public");
$user->addRole("Registered User");
Затем пусть Bouncer управляет доступом к вашим файлам:
$bouncer->manageAccess($user->getRoles(), substr($_SERVER["PHP_SELF"], 1), "fail.php");
// Any time the user tries to go to a page they don't have access to, they will get to
// fail.php. Any time they try to go to a page that is overridden for them, they will
// get to the overriding page.
Если вы хотите показывать контент на странице, только если у пользователя есть разрешение на его просмотр, просто оберните его в:
if($user->hasRole("Registered User")){
echo "The content";
}
Я думаю, что для описанной вами проблемы это было бы отличным решением!