操作
Bug(バグ) #3213
未完了opAccessControlRecordInterface は isAllowed() メソッドを実装していることを保証していない
開始日:
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 クラスを継承したクラスであるかについてチェックする
操作