Еще думаю, моя система сделана на mvc архитектуре. И вот вопрос. Есть административная часть. Для нее делать отдельную папку и в ней mvc структуру? Или просто сделать контроллер для админа? Склоняюсь к первому варианту, так как, плагин для админки имеет другое строение.
У меня админки не имеют отдельной mvc-структуры, просто контроллеры админки чаще всего вынесены в модуль, или в отдельное пространство имён - зависит от фреймворка. В Kohana, к примеру, создаётся псевдопространство Controller_Admin_*, а соответственно и папка Controller/Admin в структуре. А модели для админ. части используются те же самые, что для фронтенда, чтоб не растекаться мыслями по древу
И еще хотел спросить, как обезопасить таблицы в базе? Допустим есть таблица user, в ней хранятся логины и пароли. Какой-то сторонний разработчик написал плагин, человек загружает его, и плагин ворует данные пользователей. Делать таблицу в которой написаны какие таблицы открыты, а какие нет?
Еще вот думаю, что все эти регистраторы наверное лучше в базе хранить. Можно будет динамические менять любые параметры плагина. Параметры я имею в ввиду - событие которое ждет плагин, метод, приоритет, и т.д.
Не надо в БД, пусть выстраиваются по мере загрузки... Работал с CMS, в которой это в БД было (instant 1.10.3), фигня, раздражает жутко
Да не. Хотя... Опишу всю суть cms. Админка будет поделена на 2 части. Первая - самая обычная, как в вордпрессе, например. С нее можно управлять самим сайтом. Вторая чуть сложнее. Из нее можно управлять системой. То есть добавлять плагины, изменять их, и создавать плагины. Создание плагина происходит через редактор кода, прямо в cms (нашел подходящий плагин). Да вот, собственно, и все.
И вот у меня опять проблемка . Мой движок имеет mvc структуру, ну это и так ясно. И вот в view.php я подключаю шаблоны. Вот так: class view{ public function render ($temp_view, $content_view, $data) { include "views/".$temp_view; } } Код я немного упростил (выкинул проверки). И вот проблема. Подключаются я скажем, index.php в нем, вставлена картинка, и на странице, она не отображается, лежит она в папке view/admin/image а приписана так: image/ img.jpg. Как быть? прописывать пути так views/admin/image/img.jpg или как?
Вот посмотри как это делают другие http://symfony.com/doc/current/cookbook/assetic/asset_management.html
Сейчас разбираюсь в RBAC. И возник вопрос. Допустим я храню названия операций в базе. А как быть с задачами? Их же может и вообще не быть?
Как вообще работают задачи? Везде объясняется на примере yii. Я далёк от него. Понял, только то,что задача может "фильтровать". Например, совпадает id юзера с автором статьи, в таком случае удалять статью он может. Но это так, например. Я правильно понял? А как реализовать грамотно эту систему? Допустить я проверяют в контроллере, сначала можно ли применить к этому пользователю deletePost если да, то проверяемых совпадают ли idишники, а как? Где писать это код проверки id? Да и вообще если это админ, то проверка id вообще не нужна? Не могу разобраться.
Всё очень просто, вот пример с yii: $bizRule='return Yii::app()->user->id==$params["post"]->authID;'; - будем называть updateOwnPost Yii::app()->user->id - это id пользователя после аутентификации $params - это массив который ты передал чтобы проверить правило $post содержит информацию о записи (select id, authID, text from ... where id = 8) $params=array('post'=>$post); if(Yii::app()->user->checkAccess('updateOwnPost',$params)) { // update post } если id авторизованного пользователя совпадает с id записи из базы которую он запроси, то ты ему разрешаешь её обновлять Просто читай код https://github.com/yiisoft/yii/blob/7b0281b4f0ee6fd1e0e64f0 ... r.php#L147 переменную $bizRule через eval прогоняют
Вот вам пример совсем простой реализации, из моей доски объявлений на Kohana: Код (Text): public function action_delete() { $type = $this->request->param("type"); // Тип объявления, из URL $id = $this->request->param("id"); // id объявления, из URL $storage = new Model_Ads_Storage($type); // Хранилище объявлений $ad_model = $storage->get($id); if ($ad_model->user_id != $this->user->id && !$this->user->has_any("roles", array (2,3))) { $this->template->content = "Вы не можете удалять чужие объявления"; return; } $ad_model->delete(); }
Спасибо за ответы! Но как я пойму нужно ли применять задачу для этого типа пользователя? denis01, если я админ, хочу отредактировать чужой пост, система меня не пустит? Добавлено спустя 52 минуты 22 секунды: И где вообще хранить хранить $bizRule? У меня сейчас база имеет такую структуру: Как организовать хранение задач? Делать еще одну таблицу? Или в таблице sc_operation в поле actions делать еще название задачи?
Вот в документации нашел пример: Код (Text): 'newsReader' => array( 'type' => CAuthItem::TYPE_ROLE, 'description' => '', 'bizRule' => NULL, 'data' => NULL, 'children' => array( 0 => 'readNews', ), ), Понял только description. Что такое type? И что такое children? bizRule это я так понял тот самый фильтр, тут все ясно. Что такое data? Это данные, которые нужны для операции? P.S. Сейчас начинаю думать, что лучше бы я все изначально на yii делал Ну ничего, извлеку урок из своих ошибок.