私はmongodbauthmanagerでこれをやろうとしています。セクションごとに順を追って説明してUsage
いますが、最終的にPHP の警告が表示されます: Illegal offset type。SO にクローンする前に、 Yii Extensionにこの質問を投稿しました。
何が悪いのか教えてください。
1// 構成
'authManager'=>array(
'class' =>'CMongoDbAuthManager',
'showErrors' => true,
),
2// db に認証項目を作成する
$auth = new CMongoDbAuthManager();
$bizRule = 'return Yii::app()->user->id==$params["User"]->_id;';
$auth->createTask('updateSelf', 'update own information', $bizRule);
//I had tried with $auth->createOperation() but they has the same error
$role = $auth->createRole('user');
$role->addChild('updateSelf');
$auth->save();
ここにdbの 結果がありますdbの結果 http://i.minus.com/iIpXoBlDxaEfo.png
**3// コントローラーでアクセスをチェック中 ** -更新コードとエラー
public function actionUpdate($id)
{
$model=$this->loadModel($id);
$params = array('User'=>$model);
if (!Yii::app()->user->checkAccess('updateSelf', Yii::app()->user->id,$params) )
{
throw new CHttpException(403, 'You are not authorized to perform this action');
}
//another statement ...
}
4// 取得エラー:
致命的なエラー: MongoId 型のオブジェクトを F:\Data\03 の配列として使用できません。Lab\www\yii\framework\web\auth\CAuthManager.php(150) : 1 行目の eval()されたコード
解決された問題
の回答に基づいて@Willem Renzema
、問題を解決します。今、私はここで更新し、誰かがこのエラーを抱えているのに役立つことを願っています.
0// まず、defaultRoles で authManager を設定します
'authManager'=>array(
'class'=>'CMongoDbAuthManager',
'showErrors' => true,
'defaultRoles'=> array('user'),//important, this line help we don't need assign role for every user manually
),
1// UserIdentity クラスの保存 ID を修正
class UserIdentity extends CUserIdentity
{
private $_id;
//...
public function authenticate()
{
//...
$this->_id = (string)$user->_id;//force $this save _id by string, not MongoId object
//...
}
//...
}
2// オーテ アイテムの $bizrule を修正します
($bizrule は で実行さeval()
れますcheckAccess
)
//use _id as string, not MongoId object
$bizRule = 'return Yii::app()->user->id==(string)$params["User"]->_id;';
3// そしてユーザー checkAccess への認可
public function actionUpdate($id){
/**
* @var User $model
*/
$model=$this->loadModel($id);
$params = array('User'=>$model);
if (!Yii::app()->user->checkAccess('updateSelf', $params) )
{
throw new CHttpException(403, 'You are not authorized to perform this action');
}
//...
}
4// 完了、これで checkAccess を使用できます:D