Володя

Володя

С нами с 18 декабря 2012; Место в рейтинге пользователей: #4
Володя
13 апреля 2014, 14:56
0
c админки все нормал, код отрабатывает.
Но если с фронта то не хватает прав — permission_denied
Пробую следующее:
создал mycreate.class.php
<?php
// Подгружаем класс системного процессора, отвечающего за создание ресурсов
require_once MODX_CORE_PATH.'components/tickets/processors/mgr/section/create.class.php';

// Создаем свой новый класс, расширяющий TicketsSectionCreate
class myTicketsSectionCreateProcessor  extends TicketsSectionCreateProcessor{
    public $permission = 'new_document'; 
    public $contextKey = 'web';
}
return 'myTicketsSectionCreateProcessor';
вызов так
// Массив, который мы передадим в процессор, там его ловить в $scriptProperties
$processorProps = array(
	'class_key' => 'TicketsSection',
	'template' => 15,
	'alias' => 'myTicket',
	'parent' => 0,
        'context_key' => 'web',
	
);
// Массив опций для метода runProcessor
$otherProps = array(
    // Здесь указываем где лежат наши процессоры
    'processors_path' => $modx->getOption('core_path') . 'components/tickets/processors/mgr/my/'
);

$response = $modx->runProcessor('mycreate', $processorProps, $otherProps);
if ($response->isError()) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'my error:' .$response->getMessage());
}
return $response->response;
что не так делаю? или как можно обойти проверку прав для создания секции с фронта?
Володя
13 апреля 2014, 11:04
4
+1
Приведу небольшой пример на пакете — Office, может кому пригодится…
Допустим хотим ограничить доступ пользователей по email. Пускать только разрешенные email.
1. создаем свое событие для плагина
<?php
$Event = $modx->newObject('modEvent');
$Event->set('name', 'OnOfficeBeforeLogin');
$Event->set('service',1); 
$Event->set('groupname', 'office');
$Event->save();
проверить создалось ли событие можно так
$test = $modx->getObject('modEvent',array('name'=>'OnOfficeBeforeLogin'));
echo $test->get('groupname');
2. добавляем в action.php
$modx->invokeEvent('OnOfficeBeforeLogin', array(
            '_REQUEST' => $_REQUEST
		));
3. пишем плагин на наше событие
<?php
switch ($modx->event->name) {

	case 'OnOfficeBeforeLogin':
	    if ($_REQUEST['action']='auth/sendlink') {
	    
	    $command = $modx->getOption('office_ms2_command', null, "", true);//системная настройка с email участниками
            $instructor = $modx->getOption('office_ms2_instructor', null, "", true);//системная настройка с email тренерами
        
            $emails = array_merge(explode(',', $command ),explode(',', $instructor ));
  
	    if (!in_array($_REQUEST['email'], $emails)) {
	        //меняем почту на неправильную для выдачи ошибки
            $_REQUEST['email'] = "неправильная";
   
	    }
	    else {
           //если есть доступ то ничего не делаем
           //или делаем чтото еще)))
	    }

	    }
	    break;
}
Володя
12 апреля 2014, 20:10
+1
да все получилось! Спасибо!
Володя
11 апреля 2014, 16:17
0
Василий, ну у меня так же. По твоим же статьям все осваивал)))
я просто пока прописал так
php_admin_value[open_basedir] = /var/www/site/:/tmp/
ну и соответственно он распаковывает файлы во временной директории /tmp/
ругаться перестал, все нормально…
p.s. но по сути я его выпустил выше, в плане защиты не есть хорошо да?
Володя
11 апреля 2014, 11:30
0
снял ограничения на curl_multi_exec и наконец то увидел свои файлы на яндекс)))
значит дело в правах точно…
че ж ему зараза не нравится
Володя
11 апреля 2014, 11:27
0
попробовал вообще выставить php_admin_value[open_basedir] = none
это же должно снять ограничение?
но тогда получил
[2014-04-11 11:24:28] (ERROR @ phar:///var/www/reg33/www/core/components/yandexdisk/model/yandexdisk/yandex-sdk-0.1.1.phar/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php : 225) PHP warning: curl_multi_exec() has been disabled for security reasons
Володя
11 апреля 2014, 11:03
0
php_admin_value[open_basedir] = /var/www/reg33/
Володя
11 апреля 2014, 10:13
0
поставил modx c нуля… ошибка та же.
и вообще почему он за пределы папки www смотрит?
Modx находится по пути /var/www/reg33/www/
Володя
11 апреля 2014, 09:34
0
ну сессии он туда успешно же сохраняет…
Володя
11 апреля 2014, 09:34
0
при установке пакета ругань на
Could not get table name for class: xPDOObject
xPDOObject::fromJSON() -- Could not convert jsonSource to a PHP array.
Володя
10 апреля 2014, 21:18
0
решил попробовать и вот такая бяка
[2014-04-10 21:15:28] (ERROR @ phar:///var/www/reg33/www/core/components/yandexdisk/model/yandexdisk/yandex-sdk-0.1.1.phar/vendor/guzzle/http/Guzzle/Http/Client.php : 348) PHP warning: file_exists(): open_basedir restriction in effect. File(/tmp/guzzle-cacert.pem) is not within the allowed path(s): (/var/www/reg33/)
[2014-04-10 21:15:28] (ERROR @ phar:///var/www/reg33/www/core/components/yandexdisk/model/yandexdisk/yandex-sdk-0.1.1.phar/vendor/guzzle/http/Guzzle/Http/Client.php : 348) PHP warning: copy(): open_basedir restriction in effect. File(/tmp/guzzle-cacert.pem) is not within the allowed path(s): (/var/www/reg33/)
[2014-04-10 21:15:28] (ERROR @ phar:///var/www/reg33/www/core/components/yandexdisk/model/yandexdisk/yandex-sdk-0.1.1.phar/vendor/guzzle/http/Guzzle/Http/Client.php : 348) PHP warning: copy(/tmp/guzzle-cacert.pem): failed to open stream: Operation not permitted
посмотрел лог приложения на яндекс, обращений не было…
в чем дело может быть?
p.s. PHP 5.4.19
Володя
09 апреля 2014, 18:15
0
видел на гитхабе когда ты только задумал его написать… очень рад что дело сдвинулось! С удовольствием затестю и отпишу! Спасибо!!!
Володя
08 апреля 2014, 13:37
0
так да… таблицу создал и все…
Володя
08 апреля 2014, 13:34
0
Да что тут еще писать то? все что есть — выше тут же… Я никакой цели не преследовал, кроме как познавательной. Василий написал что сортировка только по собственной таблице — ну я и попробовал…
Что не ясно спрашивайте, я со своей стороны как малограмотный могу на пальцах обьяснить.)
Володя
08 апреля 2014, 12:55
0
вот так заработало, но я один фиг до конца не понял что к чему…
[[!pdoUsers?
&sortby=`modUser.id`
&tpl=`@INLINE [[+username]] - [[+registered]] - [[+lastactivity]]`
&showLog=`1`

&leftJoin=`{"UsersActivityMy":{"class":"UsersActivityMy","alias":"UsersActivityMy","on":"UsersActivityMy.id = modUser.id"}}`

&select=`{"UsersActivityMy":"`UsersActivityMy`.`registered`,`UsersActivityMy`.`lastactivity`"}`
]]
тупо написал, а оно взяло и заработало…
Володя
08 апреля 2014, 12:28
0
аха… ты прав!
теперь осталось разобраться с лексиконом запроса и дело в шляпе!)
Я ж все обычно тупо копирую с твоих примеров вот эти лефтджойны и селекты..., а че это такое — не вникал.
Володя
08 апреля 2014, 12:19
0
почему то &showLog=`1` не пашет в pdoUsers
Володя
08 апреля 2014, 12:05
0
p.s. То есть мне не нужно &loadModels=`users`?
а достаточно
[[!pdoPage?
&element=`pdoUsers`
&tpl=`@INLINE [[+username]] - [[+registered]] - [[+lastactivity]]`
&leftJoin=`чего то там и тд`
]]
Володя
08 апреля 2014, 11:54
0
Там и лежат… Просто своим сниппетом данные выводятся. Но я никак теперь не допру как к выводу pdoUsers подключить эту свою таблицу.
Володя
08 апреля 2014, 11:14
0
думал косяк из за буквы заглавной, переименовал в usersactivity, один фиг та же ошибка.
[2014-04-08 11:14:03] (ERROR @ /index.php) Path specified for package usersactivitymy is not a valid or accessible directory: /var/www/sitename/www/core/components/usersactivitymy/model/