0

登録したユーザーは自分のデータのみを編集でき、他のユーザーは編集できません。ACL(aroとaco)を設定したところ。私の設定:

クラス ユーザーは AppModel を拡張します {

public function bindNode($user) {

    return array('model' => 'Group', 'foreign_key' => $user['User']['group_id']);

}

class AppController extends Controller {

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
    ),
    'Session'
);
4

1 に答える 1

1

isAuthorizedメソッドをコントローラーに追加する必要があります。このメソッドでは、渡されたパラメーターを使用して実行しようとしているアクションがユーザーに許可されていることを確認します。次のようなコードを使用できます。

switch ($this->action) {
    case 'delete':
    case 'edit':
        // id of what they are trying to edit
        $this->Topic->id = $this->params['pass'][0];
        // id of the owner of what they are trying to edit
        $ownerId = $this->Topic->field('user_id');

        $userId = $this->Auth->user('id');
        if ($ownerId == $userId) {
            // allow users to edit or delete their own topics
            return TRUE;
        } else {
            // allow admin group to edit any topic
            return $this->Auth->user('group') == 'admin';
        }
}

「ユーザーは管理者グループのメンバーです」などのチェックをハードコーディングするのではなく、パーミッションのチェックに Cake の ACL システムを使用したい場合は、こちらのチュートリアルを参照してください: http://jonisalonen.com/2010/role-based-acl-in -cakephp/ Cake 1.3用に書かれていますが、大きな違いがあるかどうかは確認していません。

于 2012-04-10T06:59:20.967 に答える