За последние 24 часа нас посетили 22837 программистов и 1263 робота. Сейчас ищут 760 программистов ...

mvc система с поддержкой плагинов

Тема в разделе "Прочие вопросы по PHP", создана пользователем irobot, 15 ноя 2014.

  1. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Еще думаю, моя система сделана на mvc архитектуре. И вот вопрос. Есть административная часть. Для нее делать отдельную папку и в ней mvc структуру? Или просто сделать контроллер для админа? Склоняюсь к первому варианту, так как, плагин для админки имеет другое строение.
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    У меня админки не имеют отдельной mvc-структуры, просто контроллеры админки чаще всего вынесены в модуль, или в отдельное пространство имён - зависит от фреймворка. В Kohana, к примеру, создаётся псевдопространство Controller_Admin_*, а соответственно и папка Controller/Admin в структуре. А модели для админ. части используются те же самые, что для фронтенда, чтоб не растекаться мыслями по древу
     
  3. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    А вообще в разных cms как реализованы системы плагинов?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    В разных разные, по этому у каждой есть документация по написанию плагинов.
     
  5. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    И еще хотел спросить, как обезопасить таблицы в базе? Допустим есть таблица user, в ней хранятся логины и пароли.
    Какой-то сторонний разработчик написал плагин, человек загружает его, и плагин ворует данные пользователей. Делать таблицу в которой написаны какие таблицы открыты, а какие нет?
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Если плагин загружен ему можно доверять
     
  7. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Еще вот думаю, что все эти регистраторы наверное лучше в базе хранить. Можно будет динамические менять любые параметры плагина. Параметры я имею в ввиду - событие которое ждет плагин, метод, приоритет, и т.д.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Не надо в БД, пусть выстраиваются по мере загрузки... Работал с CMS, в которой это в БД было (instant 1.10.3), фигня, раздражает жутко
     
  9. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Ну а если нужно например поменять приоритет плагина, придется его в коде менять?
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    А, ну тогда обязательно интерфейсную часть в админке :) Хотя что-то вы сильно мудрёное пишите, я чую...
     
  11. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Да не. Хотя... Опишу всю суть cms. Админка будет поделена на 2 части. Первая - самая обычная, как в вордпрессе, например. С нее можно управлять самим сайтом.
    Вторая чуть сложнее. Из нее можно управлять системой. То есть добавлять плагины, изменять их, и создавать плагины. Создание плагина происходит через редактор кода, прямо в cms (нашел подходящий плагин). Да вот, собственно, и все.
     
  12. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    А как на 1с битрикс сделана поддержка нескольких сайтов?
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Для каждого сайта загружаются свои настройки и данные
     
  14. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    И вот у меня опять проблемка :). Мой движок имеет 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 или как?
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
  16. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    А можно ли просто javascript`ом выбрать все картинки, стили, скрипты и заменить их пути подключения?
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Всё можно, только зачем? проще один раз сделать Symbolic link для папки с файлами
     
  18. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Сейчас разбираюсь в RBAC. И возник вопрос. Допустим я храню названия операций в базе. А как быть с задачами? Их же может и вообще не быть?
     
  19. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Как вообще работают задачи? Везде объясняется на примере yii. Я далёк от него. Понял, только то,что задача может "фильтровать". Например, совпадает id юзера с автором статьи, в таком случае удалять статью он может. Но это так, например. Я правильно понял? А как реализовать грамотно эту систему?
    Допустить я проверяют в контроллере, сначала можно ли применить к этому пользователю deletePost если да, то проверяемых совпадают ли idишники, а как? Где писать это код проверки id? Да и вообще если это админ, то проверка id вообще не нужна? Не могу разобраться.
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Всё очень просто, вот пример с 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 прогоняют
     
  21. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Вот вам пример совсем простой реализации, из моей доски объявлений на Kohana:
    Код (Text):
    1.  
    2. public function action_delete() {
    3.         $type    = $this->request->param("type"); // Тип объявления, из URL
    4.         $id      = $this->request->param("id"); // id объявления, из URL
    5.         $storage = new Model_Ads_Storage($type); // Хранилище объявлений
    6.         $ad_model = $storage->get($id);
    7.         if ($ad_model->user_id != $this->user->id && !$this->user->has_any("roles", array (2,3))) {
    8.             $this->template->content = "Вы не можете удалять чужие объявления";
    9.             return;
    10.         }
    11.         $ad_model->delete();
    12. }
     
  22. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Спасибо за ответы! Но как я пойму нужно ли применять задачу для этого типа пользователя? denis01, если я админ, хочу отредактировать чужой пост, система меня не пустит?

    Добавлено спустя 52 минуты 22 секунды:
    И где вообще хранить хранить $bizRule? У меня сейчас база имеет такую структуру:
    [​IMG]
    [​IMG]
    Как организовать хранение задач? Делать еще одну таблицу? Или в таблице sc_operation в поле actions делать еще название задачи?
     
  23. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    В yii правила хранят в базе или файлом, мне больше файлом нравится, так как там простой aray массив.
     
  24. irobot

    irobot Новичок

    С нами с:
    15 ноя 2014
    Сообщения:
    88
    Симпатии:
    0
    Вот в документации нашел пример:
    Код (Text):
    1. 'newsReader' => array(
    2.         'type' => CAuthItem::TYPE_ROLE,
    3.         'description' => '',
    4.         'bizRule' => NULL,
    5.         'data' => NULL,
    6.         'children' => array(
    7.             0 => 'readNews',
    8.         ),
    9.     ),
    Понял только description. Что такое type? И что такое children? bizRule это я так понял тот самый фильтр, тут все ясно. Что такое data? Это данные, которые нужны для операции?
    P.S. Сейчас начинаю думать, что лучше бы я все изначально на yii делал :) Ну ничего, извлеку урок из своих ошибок.
     
  25. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Посмотри код как эти данные применяются, в любой ситуации если, что-то не понятно, смотри код.