0

Controller_Template で Kohana 3.2 を使用しています。基本的にやりたいことは、各 action_method の ACL をチェックすることです。失敗した場合は、アクセスが拒否されたビューを読み込み、残りの action_method コードをスキップします。それ以外の場合は、読み込みを続行します。

if...else ステートメントを使用して単純なブール値チェックを実行できることはわかっています (または を実行することもできますif(check_permission())return;) が、action_page()... ifできる、ちょうどいいcheck_permission();。内にさらにコードを追加しても大丈夫ですfunction check_permission()

function check_permission() {
    $this->template->content = View::factory('system/access_denied')
        ->bind('title', $title);
    $title = 'Access Denied';
}

function action_page() {
    check_permission();

    $this->template->content = View::factory('page/index')
        ->bind('title', $title);
        ->bind('data', $data);

    $title = 'Page loaded';
    .
    .
    .
}

これを達成できるコハナ固有の方法があるのではないでしょうか? ネイティブphpも大丈夫です...

4

2 に答える 2

1

優れた ACL モジュールが必要な場合は、Zend Framework のACL を使用できます。Zend Framework を含む Kohana モジュールを次に示します。

次のように使用できます。

始める:

$acl = new Zend_Acl();

役割を追加します。

$acl->addRole(new Zend_Acl_Role('guest'))
  ->addRole(new Zend_Acl_Role('member'))
  ->addRole(new Zend_Acl_Role('admin'));

リソース (コントローラー) を追加します。

$acl->add(new Zend_Acl_Resource('someController'));

リソース (コントローラー) の役割と特権 (アクション) へのアクセスを許可します。

 $acl->allow('member', 'someController' array('page'));

次に、メソッドの前にユーザーの許可をチェックインします。

public function befor() 
{
    $role = .... // role from user
    $resource = $this->request->controller();
    $action = $this->request->action();

    if ($acl->isAllowed($role, $resource, $action)) 
    {
      //...redirect
    }
}

これは、あなたが探しているものですか?

于 2012-05-21T09:18:49.110 に答える
0

私はあなたを助けたいと思っRequest::current()->redirect('...')ています。befor()

このような:

  public function befor() 
  {
    parent::befor();

    if (... have no access) 
    {
       Request::current()->redirect('access/denied');
    }
  }

...

Class Access extends Controller_Template {

  public function action_denied() 
  {
    $this->template->content = View::factory('system/access_denied')
        ->bind('title', $title);
    $title = 'Access Denied';
  }
}
于 2012-05-21T06:47:02.417 に答える