プロジェクト

全般

プロフィール

Bug(バグ) #3213

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

Yuya Watanabe11年以上前に追加. 約4年前に更新.

ステータス:
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 クラスを継承したクラスであるかについてチェックする

関連するチケット

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

履歴

#1 Chiharu Nakajima9年以上前に更新

  • 優先度Normal(通常) から Low(低め) に変更

#2 Chiharu Nakajima9年以上前に更新

このチケットの内容は下記の項目に該当する不具合であるため、一旦優先度を下げます。
・未対応でもユーザーに影響が少ない不具合(回避可能な不具合である等)

#3 kaoru n約4年前に更新

  • 対象バージョンOpenPNE 3.10.x にセット

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