プロジェクト

全般

プロフィール

Bug(バグ) #3213

未完了

opAccessControlRecordInterface は isAllowed() メソッドを実装していることを保証していない

Yuya Watanabe さんが約12年前に追加. ほぼ5年前に更新.

ステータス:
New(新規)
優先度:
Low(低め)
担当者:
-
対象バージョン:
開始日:
2012-09-27
期日:
進捗率:

0%

予定工数:
3.6 で発生するか:
Unknown (未調査)
3.8 で発生するか:
Unknown (未調査)

説明

概要

opAccessControlRecordInterface は isAllowed() メソッドを実装していることを保証していない
具体的には下記コード部で opAccessControlRecordInterface のインスタンスかどうかで処理を分岐しているが,
opAccessControlRecordInterface が保証しているのは generateRoleId() メソッドであり, isAllowed() を呼び出せる保証がない.

lib/routing/opDynamicAclRoute.class.php

 32     if ($result instanceof opAccessControlRecordInterface)
 33     {
 34       if (!$result->isAllowed($this->getCurrentMember(), $this->options['privilege']))

lib/util/opAccessControlRecordInterface.class.php

 18 interface opAccessControlRecordInterface                                            
 19 {                                                                                   
...
 27   public function generateRoleId(Member $member);
 28 }

実際に isAllowed(Member $member, $privilege) が実装されているのは opDoctrineRecord クラスである.

lib/util/opDoctrineRecord.class.php
156:  public function isAllowed(Member $member, $privilege)

修正案

  • opAccessControlRecordInterface インタフェースに isAllowed() メソッドを追加する.
  • opDynamicAclRoute クラス内での isAllowed() を利用する分岐で opDoctrineRecord クラスを継承したクラスであるかについてチェックする

関連するチケット 1 (0件未完了1件完了)

関連している OpenPNE 3 - Enhancement(機能追加・改善) #556: Change opDynamicAclRoute not to use ACL Builder if the protected model class implements opAccessControlRecordInterface (opDynamicAclRoute で保護するモデルクラスが opAccessControlRecordInterface を実装している場合は ACL Builder を使わないようにする)Fixed(完了)Kousuke Ebihara2010-02-02

操作

他の形式にエクスポート: Atom PDF