0

データベースには、Admins と Users の 2 つのテーブルがあります。管理者は、9 つ​​のコントローラーがある管理者パネルのみを開く必要があります。ユーザーには、「HomeController」というコントローラー名が 1 つあるフロント エンドが表示されます。

ユーザーがログインすると、管理者専用のコントローラーにアクセスできます。また、管理者がログインすると、ユーザー専用のコントローラーを開くことができます。これを防ぐにはどうすればよいですか?

AppController:

class AppController extends Controller {

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Admin' => array(
                'userModel' => 'Admin',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                    )
            ),
            'User' => array(
                'userModel' => 'User',
                'fields' => array(
                    'username' => 'username',
                    'password' => 'password'
                    )
            )
        )
    )
);

public function beforeFilter()
{

}  

}

TransactionsController: (管理者がアクセスします)

public function beforeFilter()
{       
    $this->Auth->loginRedirect = array('controller' => 'items', 'action' => 'index');
    $this->Auth->logoutRedirect = array('controller' => 'admins', 'action' => 'login');
    $this->Auth->loginAction = array('controller' => 'admins', 'action' => 'login');

    // Basic setup
    $this->Auth->authenticate = array('Form');

    // Pass settings in
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'Admin')
    );

}

public function isAuthorized($admin)
{
    if(isset($admin['Admin']['id']))
    {
        return true;
    }
    return false;
}

HomeController: (ユーザーがアクセスする)

public function beforeFilter()
{   
    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');

    // Basic setup
    $this->Auth->authenticate = array('Form');

    // Pass settings in
    $this->Auth->authenticate = array(
        'Form' => array('userModel' => 'User')
    );

    $this->Auth->allow('view', 'index', 'item', 'itemlist', 'search');
}

public function isAuthorized($user)
{
    if(isset($user['User']['id']))
    {
        return true;
    }
    return false;
}
4

1 に答える 1

1

管理者とユーザーの 2 つのレベルの認証しかない場合は、プレフィックス ルーティングを試すことができます。

URL は事前定義されています

http://mysite.com/admin/transactions

これは、管理者とユーザーごとにプレフィックス付きのインデックス メソッドを持つトランザクション コントローラーにルーティングされます。

public function admin_index(){

}

public function user_index(){
    $this->redirect(array('controller' => 'home', 'action' => 'index'));
}

2 つ以上のユーザー グループがある場合は、アクセス制御リストを参照してください。

于 2013-05-05T17:24:58.737 に答える