Zend Framework を使用するSocial Engineを使用してサイト用のモジュールを開発しています。私は Zend Framework と Social Engine の両方に慣れていませんが、OOP と MVC アーキテクチャの経験があるので、比較的早く基本を理解することができます。
私が開発中のテスト モジュールなので、ユーザーが CD 情報を作成、編集、または削除できる単純なモジュールを作成しました。次に、CD 情報を表示する好きな場所に表示できるウィジェットがあります。
私は今、人々が見ることができるCDなどの許可を設定する必要があるところにいます。そこで他のモジュールを調べたところ、Pollモジュールが具体的な例であることがわかりました。
他のモジュールを見ると、何かを作成するときに、ユーザーが自分の権限を手動で設定できることがわかりました。
したがって、このコードをフォームに追加して、関連する権限を持つ選択ボックスを作成しました。
$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));
正直なところ、明らかに選択ボックスを作成して指定された値で埋める以外に、このコードが何をするのか完全にはわかりません。
したがって、ユーザーが「Everyone」を選択すると、誰もがその CD を削除および編集できるようになります。
明らかに、コントローラーには、ユーザーが各CDなどを表示する権利があるかどうかを判断するコードが必要だと思いました.
Poll コントローラーをスキャンすると、コントローラーの init 関数にあることがわかりました。
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;
}
}
そして、上部の各アクションには、いくつかの異なる認証コードがあります。そのような例の 1 つは、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
、Poll コントローラーのランダムなスニペットです。
$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%正直であるかどうかはまだわかりません. 上記のいずれかを解決して、説明を手伝ってください。可能であれば、必要な権限をモジュールに適用する方法を教えてください。