0

いくつかの領域を持つ小さな Web アプリを構築しようとしています。

  1. ユーザーエリア
  2. 管理者エリア

私は Auth コンポーネントを使用しており、ログイン後に確認してAuth->user('role')いますが、「通常のユーザー」が URL に管理者パスを入力してアクセスすることを妨げません (彼はログインしています)。当然、管理者はどのエリアにもアクセスできるはずですが、それは私の現在の問題ではありません:)

これらの種類のアクセス許可/認証を管理し、さらに重要なことに実装する最良の方法は何ですか?

ありがとう!

4

2 に答える 2

1

ACLがあります。ただし、ACL を使用しないことができるのであれば、ACL を使用しないことをお勧めします。ロール ベース認証は確かに優れており、実装も簡単です。admin routing開始方法は正しいですが、ファイルで有効にする必要がありcore.phpます。

Configure::write('Routing.prefixes', array('admin'));

それが完了すると、コーディングが正確にセットアップされ、認証が行われます。役割を持つユーザーのみが、次のadminような管理セクションにアクセスできます。http://www.yoursite.com/admin/users

ロールベース認証を成功させる魔法のほとんどは、AppControllerクラスで行われます。

例を挙げると、次のようにAppController.phpファイルをセットアップします。

public $components = array(
    'Cookie',
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'userModel' => 'User',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                )
            )
        ),
        'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
        'authorize' => array('Controller')
    )
);


public function isAuthorized($user){        
    if(isset($user['role']) && $user['role'] === 'admin'){
        return true;
    }
    return false;
}

adminレイアウトとmembers一般的なレイアウトが必要な場合は、 または 関数で行うことができbeforeFilter()ますbeforeRender()

于 2013-01-25T20:10:19.540 に答える
0

私はisAuthorizedあなたのコントローラで関数を使用します

次のようなサンプル:

class PostsController extends AppController {

    public function isAuthorized() {
        if($this->Auth->user('role_id' != '1')) return false;
    }
}

そしてあなたのAppController beforeFilter()追加で

    $this->Auth->authorize = 'Controller';
于 2013-01-26T09:07:58.407 に答える