Я разрабатываю модуль для сайта с помощью Social Engine , который использует Zend Framework. Я новичок в Zend Framework и Social Engine, но у меня есть опыт работы с архитектурой OOP и MVC, поэтому я могу относительно быстро освоить основы.
Это тестовый модуль, который я разрабатываю, поэтому только что создал простой модуль, в котором пользователь может создавать, редактировать или удалять информацию о компакт-диске. Затем есть виджет, который может отображаться там, где им нравится, который показывает там информацию о компакт-диске.
Сейчас я нахожусь в том месте, где мне нужно установить разрешения на то, какие компакт-диски люди могут видеть и т. д. Поэтому я изучил другие модули и нашел модуль опроса в качестве конкретного примера.
Глядя на другие модули, я понял, что когда вы что-то создаете, они позволяют пользователю устанавливать свои разрешения вручную.
Поэтому добавил этот код в мою форму, чтобы создать поле выбора с соответствующими разрешениями:
$auth = Engine_Api::_()->authorization()->context;
$user = Engine_Api::_()->user()->getViewer();
$viewOptions = (array) Engine_Api::_()->authorization()->getAdapter('levels')->getAllowed('ryan', $user, 'auth_view');
$viewOptions = array_intersect_key($availableLabels, array_flip($viewOptions));
$privacy = null;
if( !empty($viewOptions) && count($viewOptions) >= 1 ) {
// Make a hidden field
if(count($viewOptions) == 1) {
//$this->addElement('hidden', 'auth_view', array('value' => key($viewOptions)));
$privacy = new Zend_Form_Element_Hidden('auth_view');
$privacy->setValue(key($viewOptions));
// Make select box
} else {
$privacy = new Zend_Form_Element_Select('auth_view');
$privacy->setLabel('Privacy')
->setDescription('Who may see this CD?')
->setMultiOptions($viewOptions)
->setValue(key($viewOptions));
/*$this->addElement('Select', 'auth_view', array(
'label' => 'Privacy',
'description' => 'Who may see this CD?',
'multiOptions' => $viewOptions,
'value' => key($viewOptions),
));*/
}
}
$this->addElements(array($artist, $title, $privacy, $submit));
Честно говоря, я не совсем уверен, что делает этот код, кроме того, что явно создает поле выбора и заполняет его указанными значениями.
Поэтому, если пользователь выбирает «Все», каждый должен иметь возможность удалять и редактировать этот компакт-диск и так далее.
Очевидно, я думал, что в контроллере должен быть какой-то код, который мог бы определять, есть ли у пользователя права на просмотр каждого компакт-диска и т. д.
Итак, просканировав контроллер опроса, я обнаружил, что это функция инициализации контроллера :
public function init() {
// Get subject
$poll = null;
if( null !== ($pollIdentity = $this->_getParam('poll_id')) ) {
$poll = Engine_Api::_()->getItem('poll', $pollIdentity);
if( null !== $poll ) {
Engine_Api::_()->core()->setSubject($poll);
}
}
// Get viewer
$this->view->viewer = $viewer = Engine_Api::_()->user()->getViewer();
$this->view->viewer_id = Engine_Api::_()->user()->getViewer()->getIdentity();
// only show polls if authorized
$resource = ( $poll ? $poll : 'poll' );
$viewer = ( $viewer && $viewer->getIdentity() ? $viewer : null );
if( !$this->_helper->requireAuth()->setAuthParams($resource, $viewer, 'view')->isValid() ) {
return;
}
}
. И в каждом действии вверху у них есть какой-то другой код авторизации, одним из таких примеров является editAction
, у которого этот код находится прямо вверху:
// Check auth
if( !$this->_helper->requireUser()->isValid() ) {
return;
}
if( !$this->_helper->requireSubject()->isValid() ) {
return;
}
if( !$this->_helper->requireAuth()->setAuthParams(null, null, 'edit')->isValid() ) {
return;
}
также в том же действии есть несколько других битов, я не понимаю, что они делают,ниже случайные фрагменты из editAction
в контроллере опроса:
$auth = Engine_Api::_()->authorization()->context;
$roles = array('owner', 'owner_member', 'owner_member_member', 'owner_network', 'registered', 'everyone');
// Populate form with current settings
$form->search->setValue($poll->search);
foreach( $roles as $role ) {
if( 1 === $auth->isAllowed($poll, $role, 'view') ) {
$form->auth_view->setValue($role);
}
if( 1 === $auth->isAllowed($poll, $role, 'comment') ) {
$form->auth_comment->setValue($role);
}
}
// CREATE AUTH STUFF HERE
if( empty($values['auth_view']) ) {
$values['auth_view'] = array('everyone');
}
if( empty($values['auth_comment']) ) {
$values['auth_comment'] = array('everyone');
}
$viewMax = array_search($values['auth_view'], $roles);
$commentMax = array_search($values['auth_comment'], $roles);
Моя проблема в том, что я действительно мало что понимаю, если что-то из вышеперечисленного, и после того, как я просидел над ним пару дней и погуглил, чтобы мои пальцы болели, я до сих пор не имею ни малейшего понятия, если я на 100% честен. Может ли что-то из вышеперечисленного быть прояснено для меня, помочь объяснить мне что-то и, если возможно, как я могу применить разрешения, которые я хочу, к моему модулю.