Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 5744 Просмотров
*

Toreador

  • Осваиваюсь на форуме
  • 48
  • 5 / 1
  • Кто ветром служит, тому дымом платят.
[Решено] Создание Access Levels
« : 26.01.2011, 13:10:23 »
Нужна помощь господа.
Имеется access.xml:
Код
<?xml version="1.0" encoding="utf-8" ?>
<access component="com_mycomponent">
<section name="component">
<action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
<action name="core.manage" title="JACTION_MANAGE" description="JACTION_MANAGE_COMPONENT_DESC" />
<action name="core.create" title="JACTION_CREATE" description="JACTION_CREATE_COMPONENT_DESC" />
<action name="core.delete" title="JACTION_DELETE" description="JACTION_DELETE_COMPONENT_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="JACTION_EDIT_COMPONENT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="JACTION_EDITSTATE_COMPONENT_DESC" />
<action name="core.edit.own" title="JACTION_EDITOWN" description="JACTION_EDITOWN_COMPONENT_DESC" />
</section>
<section name="topics">
<action name="core.create" title="JACTION_CREATE" description="COM_CATEGORIES_ACCESS_CREATE_DESC" />
<action name="core.delete" title="JACTION_DELETE" description="COM_CATEGORIES_ACCESS_DELETE_DESC" />
<action name="core.edit" title="JACTION_EDIT" description="COM_CATEGORIES_ACCESS_EDIT_DESC" />
<action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" />
<action name="core.edit.own" title="JACTION_EDITOWN" description="COM_CATEGORIES_ACCESS_EDITOWN_DESC" />
</section>
</access>
Как организовать сохранение этих прав доступа.
При редактировании топика в моём компоненте вывел:
Код
...<fieldset class="panelform">
<?php echo $this->form->getLabel('rules'); ?>
<?php echo $this->form->getInput('rules'); ?>
</fieldset>
...
Естественно берётся отсюда /models/forms/topic.xml:
Код
...
<field name="rules" type="rules" label="JFIELD_RULES_LABEL"
translate_label="false" class="inputbox" filter="rules"
component="com_mycomponent" section="topics" validate="rules"
/>
...
Но при изменении ничего не сохраняется.
Примеров пока найти не могу(
Пробовал в моделе написать:
Код
public function save($data)
{
$table = $this->getTable();
if (isset($data['rules'])) {
$rules = new JRules($data['rules']);
$table->setRules($rules);
}
return parent::save($data);
}
Не могу понять, где нужно указывать что нужно сейвнуть пермишенсы то :(
Заранее спасибо!
« Последнее редактирование: 24.09.2012, 02:18:08 от Sulpher »
*

zuich

  • Новичок
  • 9
  • 3 / 0
Re: Создание Access Levels
« Ответ #1 : 21.03.2011, 20:07:43 »
Данный вопрос уже рассматривается в 3 темах. Опишу весь алгоритм  создание Access Levels здесь.

первое:

при создании компонента, в таблицу БД надо вставить поле

Цитировать
DROP TABLE IF EXISTS `#__component_myitems;
CREATE TABLE `#__component_myitems` (
  `id` integer unsigned NOT NULL auto_increment,
  `asset_id` INTEGER UNSIGNED NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
  `catid` int(11) NOT NULL default '0',

.............
.............

второе:

вставить в access.xml

Цитировать
.......
        <section name="myitem">
                <action name="core.create" title="JACTION_CREATE" description="COM_BOARD_ACCESS_CREATE_DESC" />
                <action name="core.delete" title="JACTION_DELETE" description="COM_BOARD_ACCESS_DELETE_DESC" />
                <action name="core.edit" title="JACTION_EDIT" description="COM_BOARD_ACCESS_EDIT_DESC" />
                <action name="core.edit.state" title="JACTION_EDITSTATE" description="COM_BOARD_ACCESS_EDITSTATE_DESC" />
                <action name="core.edit.own" title="JACTION_EDITOWN" description="COM_BOARD_ACCESS_EDITOWN_DESC" />
        </section>
.......


третье:

в models/forms/myitem.xml

Цитировать
                <field name="asset_id" type="hidden" filter="unset" />

                       
                <field name="rules" type="rules" label="JFIELD_RULES_LABEL"
                        translate_label="false" class="inputbox" filter="rules"
                        component="com_component" section="myitem" validate="rules" />

четвертое:

В views/myitem/tmpl/edit.php

Цитировать
    <?php if ($this->canDo->get('core.admin')): ?>
                        <li><span class="faux-label"><?php echo JText::_('JGLOBAL_ACTION_PERMISSIONS_LABEL'); ?></span>
                            <div class="button2-left"><div class="blank">
                               <button type="button" onclick="document.location.href='#access-rules';">
                                   <?php echo JText::_('JGLOBAL_PERMISSIONS_ANCHOR'); ?>
                               </button>
                             </div></div>
                        </li>
     <?php endif; ?>

.....................
....................

        <?php if ($this->canDo->get('core.admin')): ?>
                <div class="width-100 fltlft">
                        <?php echo JHtml::_('sliders.start','permissions-sliders-'.$this->item->id, array('useCookie'=>1)); ?>

                                <?php echo JHtml::_('sliders.panel',JText::_('JGLOBAL_FIELDSET_RULES'), 'access-rules'); ?>

                                <fieldset class="panelform">
                                        <?php echo $this->form->getLabel('rules'); ?>
                                        <?php echo $this->form->getInput('rules'); ?>
                                </fieldset>

                        <?php echo JHtml::_('sliders.end'); ?>
                </div>
        <?php endif; ?>




пятое:

в tables/myitem.php

Цитировать
        protected function _getAssetName()
        {
                $k = $this->_tbl_key;
                return 'component_myitem.'.(int) $this->$k;
        }

        protected function _getAssetTitle()
        {
                return $this->title;
        }

        protected function _getAssetParentId($table = null, $id = null)
        {
                $assetId = null;
                $db = $this->getDbo();

                if ($this->catid) {
                        $query        = $db->getQuery(true);
                        $query->select('asset_id');
                        $query->from('#__categories');
                        $query->where('id = '.(int) $this->catid);

                        $this->_db->setQuery($query);
                        if ($result = $this->_db->loadResult()) {
                                $assetId = (int) $result;
                        }
                }

                if ($assetId) {
                        return $assetId;
                } else {
                        return parent::_getAssetParentId($table, $id);
                }
        }
       


        public function bind($array, $ignore = '')
        {
                if (isset($array['params']) && is_array($array['params'])) {
                        $registry = new JRegistry();
                        $registry->loadArray($array['params']);
                        $array['params'] = (string)$registry;
                }

                if (isset($array['metadata']) && is_array($array['metadata'])) {
                        $registry = new JRegistry();
                        $registry->loadArray($array['metadata']);
                        $array['metadata'] = (string)$registry;
                }
               
                if (isset($array['rules']) && is_array($array['rules'])) {
                        $rules = new JRules($array['rules']);
                        $this->setRules($rules);
                }
                return parent::bind($array, $ignore);
        }

Вроде ничего не забыл. Все работает.
тут надо учитывать таблицу "asset"  именно в неё записываются все права доступа

*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Re: Создание Access Levels
« Ответ #2 : 22.03.2011, 02:31:28 »
zuich - спасибо, буду вникать. Если будут вопросы, обязательно задам ;)
*

Elis

  • Осваиваюсь на форуме
  • 20
  • 3 / 0
Re: Создание Access Levels
« Ответ #3 : 08.06.2012, 08:41:16 »
кто нибудь может подсказать по поводу ACL

добавил в свой компонент ACL
добавил несколько записей в компоненте
одной записи определенной группе пользователей запретил удалять
вхожу юзером из той группы
выбираю эту запись, нажимаю на удалить, она удаляется - почему?
остальные функции (возможность создания, редактирования) работают, т.е. регулируются ACL
*

Elis

  • Осваиваюсь на форуме
  • 20
  • 3 / 0
Re: Создание Access Levels
« Ответ #4 : 21.06.2012, 06:43:34 »
разобрался в модель добавил функцию

Код
protected function canDelete($record)
{
$user = JFactory::getUser();
   
    if (!$user->authorise('core.delete', 'com_helloworld.message.'.(int) $record->id)) {
    return false;
    } else {
      return $user->authorise('core.delete', 'com_helloworld');
    }     

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] title category

Автор spirit1086

Ответов: 4
Просмотров: 1254
Последний ответ 17.08.2015, 16:42:04
от spirit1086
Создание компонента MVC

Автор borodatych

Ответов: 36
Просмотров: 3437
Последний ответ 13.04.2015, 08:17:30
от flyingspook
Как использовать облачные хранилища при создание пакета расширений?

Автор Aspik

Ответов: 4
Просмотров: 1448
Последний ответ 12.09.2014, 16:57:59
от Aspik
[Решено] Программная регистрация пользователя во внешней бд

Автор DimkaJack

Ответов: 8
Просмотров: 1794
Последний ответ 06.08.2014, 18:32:39
от DimkaJack
Создание категорий для записей в компоненте

Автор popoff17

Ответов: 3
Просмотров: 1225
Последний ответ 03.04.2014, 21:13:18
от popoff17