PDA

Просмотр полной версии : be_users/groups управление без actions как?


(:)
15.07.2008, 09:27
всем доброго дня!
Имеем свой модуль в котором юзер может создать группы страниц.
Требуется для каждой новой группы страниц создавать группу в be_groups и затем иметь возможность добавлять в неё новых пользователей в be_users.

С идеологией варианта sys_action знаком. Но нам нужна встроенная в модуль функция совмещенная с созданием страниц. Экшн предлагает делать через свой интерфейс, в этом неудобство.

Может есть уже готовые решения для примера посмотреть. Или мысли как сделать?

заранее спасибо
Евгений

Sergey M Nikitin
18.07.2008, 22:15
У меня была задача написание визарда:
Автоматическое создание 2х уровней страниц, для каждой страницы создавалась группа fe-пользователей + дефолтовое создание структуры chc-форума. В БЕ это предельно просто, даже SQL запросы не надо писать.
$data['pages']['NEW_LIGA'] = array(
"title" => t3lib_div::_GP('liganame'),
"hidden" => 0,
"pid" => "12",
);

$data['pages']['NEW_ligaData'] = array(
"title" => 'data',
"hidden" => 0,
"pid" => "NEW_LIGA",
"doktype" => 254
);


$storagePidReMap = array();

foreach (t3lib_div::_GP('workshopTitle') as $w){
$data['pages']['NEW_workshop'.$i] = array(
"title" => $w,
"hidden" => 0,
"pid" => "NEW_LIGA"
);

$data['pages']['NEW_workshopData'.$i] = array(
"title" => 'data',
"hidden" => 0,
"pid" => 'NEW_workshop'.$i,
"doktype" => 254
);

$data['fe_groups']['NEW_fegroup'.$i] = array(
"title" => $w,
"hidden" => 0,
"pid" => 'NEW_workshopData'.$i
);

$storagePidReMap['NEW_workshop'.$i] = 'NEW_workshopData'.$i;

$i++;
}


$category = 0;
foreach (t3lib_div::_GP('forum') as $f){
if($f['category'] != ""){
$i++;
$data['tx_chcforum_category']['NEWcategory_'.$i] = array(
"cat_title" => $f['category'],
"hidden" => 0,
"pid" => "NEW_ligaData"
);
}
if($f['conference'] != ""){
$i++;
$data['tx_chcforum_conference']['NEWconference_'.$i] = array(
"conference_name" => $f['conference'],
"hidden" => 0,
"cat_id" => 'NEWcategory_'.($i-1),
"pid" => "NEW_ligaData"
);
}
}

$tce = t3lib_div::makeInstance('t3lib_TCEmain');
$tce->stripslashes_values = 0;
$tce->start($data,array());
$tce->process_datamap();
unset($data);

$data['pages'][$tce->substNEWwithIDs['NEW_LIGA']] = array(
"storage_pid" => $tce->substNEWwithIDs['NEW_ligaData']
);

foreach ($storagePidReMap as $k => $v){
$data['pages'][$tce->substNEWwithIDs[$k]] = array(
"storage_pid" => $tce->substNEWwithIDs[$v]
);
}

$tce2 = t3lib_div::makeInstance('t3lib_TCEmain');
$tce2->stripslashes_values = 0;
$tce2->start($data,array());
$tce2->process_datamap();

Вот кусок кода, который вобщем-то все и делал.

см. http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/3/3/

(:)
29.07.2008, 17:00
привет, спасибо,

есть два момента.

код добавления новой группы в be_groups нормально работает, если БЕ пользователь имеет админские права. Также, в вашем примере группы добавляются не на корневую страницу с ИД=0.

В нашей задаче требуется как раз добавлять на страницу с ИД=0, плюс пользователь не обладает админскими правами.

Sergey M Nikitin
29.07.2008, 20:01
$data['pages']['NEW_ligaData'] = array(
"title" => 'data',
"hidden" => 0,
"pid" => 0",
"doktype" => 254
);

Sergey M Nikitin
29.07.2008, 20:15
Можете использовать Formidable (formidable.typo3.ug) в качестве формогенератора в БЕ, единственное, читайте внимательно рассылку там есть определенные ограничение для БЕ, так как библиотека создавалась для FE. Вот к примеру как правильно надо инициализировать Formidable в БЕ


$this->oForm = t3lib_div::makeInstance("tx_ameosformidable");
$this->oForm->init(
$this, // reference to the current plugin object
"EXT:prme_feusersinbe/res/users.xml" // soft-path to xml file
);
$this->content .= $this->oForm->render();
tx_ameosformidable::backendHeaders(&$this);

(:)
31.07.2008, 11:49
Привет,

В коде через ТСЕмейн создаем записи в таблицах be_groups и be_users.
Если у пользователя Админские права код работает нормально.
В случае неАдмина возникают проблемы с доступом.

Система проверки прав тайпы проверяет следюущее:
1) не позволяет добавлять записи на нулевую страницу никому кроме админа.
2) При добавлениии записей не все поля принимают заданные значения.

И вобщем-то это понятно, поскольку так работает система прав.

Вопрос же в том, как сказать ТСЕМейн что мы даем неАдмину права выполнять админские действия?

Расширение Actions по сути делает именно это.

Заглянув в исходники sys_action класс class.tx_sysaction.php находим подтверждение этому.

...
$tce = t3lib_div::makeInstance("t3lib_TCEmain");
$tce->stripslashes_values=0;
$tce->start($data,Array(),$this->BE_USER);

/****************/
$tce->admin=1;
/***************/

$tce->process_datamap();
...

вот именно этот код $tce->admin=1;
позволяет задать в ТСЕМейн права админа для любой операции даже если пользователь не обладает админскими правами.

надеюсь это поможет,
привет