Есть некий сайт на котором есть несколько подключаемых модулей: новости, статьи, информация о компании, доска объявлений и т.д. Назовем их условно М1, М2, М3, М4, М5. Каждый модуль - это отдельный класс. Есть на сайте кабинет, в котором пользователю доступны для администрирования определенные модули. Например: (пользователь + доступ к модулям) пользователь1: М1, М2. пользователь2: М2, М4, М5 Пользователь3: М1, М3, М5 Нужно прописать доступ к модулю для группы пользователей, и иметь возможность закрыть(временно) доступ для всех. Но как это сделать не могу сообразить. Или в базе как-то прописать, либо в классах индикатор какой-нибудь ставить. Подскажите знающие люди!!!
Определенно такой информации место в базе. Наверняка у тебя в базе есть такая сущность как пользователь. Если нет сущности Модуль, создай. Потом нужно повязать модуль на ползователя. связь - многие к одному.
да есть конечно и пользователь, и группы, и связи, и даже свойства модуля для группы. но суть не в пользователях. Смысл вот в чем - нужно сообщить модулю, что он (не)должен отображаться в кабинете (или на сайте в целом). Каким образом это сделать? Может какую-то схему подгрузки модулей организовать?
Посмотрите, как сделана система привилегий в других решениях: http://zend-framework.ru/upravlenie-pra ... -zend_acl/ http://framework.zend.com/manual/en/zend.acl.html http://onphp.ru/doxy/trunk/dir_f56ade98 ... 00cfe.html
Спасибо! Я почитал, но, честно говоря ещё не всё понял. насколько понял, у каждого модуля должен быть индикотор, прописанный в базе для каждого модуля. А именно: (не) доступен всем, доступен для администрирования. Дальше читать при авторизации группу и сравнивать со свойствами классов. Если можно расскажите на пальцах схему работы. Совсем запутался!
Чтобы рассказать схему, нужно иметь представление о конфигурации твоего приложения. Те сведения, которые ты выдал, не дают такого представления, понимаешь? Имеет ли приложение ООП-структуру и выполнены ли сами модули в виде классов? От чего они наследуются? Как выглядит процедура инициализации приложения? Именно в этот момент нужно вычитывать некий ACL (Access Control List) и выдавать информацию из него всем нуждающимся, в твоем случае модулям. В идеале ACL нужно выполнить в виде класса, экземпляр которого будет доступен в любой точке приложения (можно в виде синглтона), чтоб можно было спросить нечто PHP: $acl->isAllowed('guest', 'film', 'post') ? 'Гость может публиковать фильмы' : 'Гость не может публиковать фильмы';
Спасибо! Именно это я и искал, но не смог сформулировать! Вот что нашел: http://php.russofile.ru/phpGACL.html ( начало - http://phpclub.ru/talk/showthread.php?s ... 734&rand=0) http://popoff.donetsk.ua/text/work/libs ... admin.html http://popoff.donetsk.ua/text/work/libs ... ilege/faq/