2017-05-12 20 views
1

特定のユーザーグループだけがフロントエンドの特定のページにアクセスできるようにアクセス許可を設定しようとしています。 CMSへのアクセスはまったく必要ありません。Silverstripe - フロントエンドページのアクセス許可を設定する

シルバーストライプのpermissions guideに従っていますが、特定のページのみを表示する特定のグループを割り当てる方法がわかりません。

これは、管理者を除き、すべての人へのアクセスを拒否します:

public function init() { 
parent::init(); 
if(!Permission::check("VIEW_SITE")) Security::permissionFailure(); 
} 

public function providePermissions() { 
return array(
    "VIEW_SITE" => "Access the site", 
); 
} 

答えて

4

、彼らはあなたにしているものGroup Sに基づいて、特定のページへのアクセスを制限するには、モデルのcanView機能にそうようにどちらかMember::inGroupを使用することができます。

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

    $member = Member::currentUser(); 
    $canView = Permission::check('ADMIN') || ($member && $member->inGroup('MyGroup')); 

    if (!$canView) { 
     Security::permissionFailure(); 
    } 
} 

またはそのようなコントローラのinit機能で

特定のページに特定のPermissionを作成して、Permission(ご質問のように)を代わりに使用することも可能です。アカウントページにアクセスしたいすべてのGroupにこのPermissionを適用します(CMSのセキュリティ - >グループ - >グループX - >権限)。あなたは、その後のようなアクセスを制限することができます。申し訳ありません

# In AccountPage_Controller 
public function init() 
{ 
    parent:init(); 

    $canView = Permission::check('ADMIN') || Permission::check('VIEW_ACCOUNT_PAGE'); 

    if (!$canView) { 
     Security::permissionFailure(); 
    } 
} 

public function providePermissions() 
{ 
    return [ 
     'VIEW_ACCOUNT_PAGE' => 'View account page', 
    ]; 
} 
+0

、私は自分のサイトのためのルートを使用しています言及するのを忘れてしまいました。だから私はちょうどコントローラを使用しています。 – Craig

+0

コントローラの 'init'関数に同じロジックを置くことができます。私は答えを例で更新しました。 –

+0

ありがとうございます!これはうまくいった。 – Craig

関連する問題