2014-10-02 50 views
1

Im新的Cartalyst哨兵和ACL的概念。我設法創建了一個用戶,執行激活和登錄並註銷。Cartalyst Sentinel Laravel - 你如何創建角色?

我想把我的學習提升到一個新的水平。我希望這個laravel應用程序有兩種類型的用戶。 1是管理員另一個是訂閱者。我假設我的帳戶創建方法應默認情況下爲用戶創建一個訂戶。

public function postCreate() { 

     /* Validation */ 
     $validation = Validator::make(Input::all(), [ 
      'email' => 'required|email|max:50|unique:users', 
      'username' => 'required|min:3|max:20|unique:users', 
      'password' => 'required|min:6', 
      'password_repeat' => 'required|same:password', 
     ]); 

     if ($validation->fails()) { 

      return Redirect('login')->withErrors($validation)->withInput(); 

     } else { 

      $credentials = Input::all(); 
      $user = Sentinel::register($credentials); 

      $activation = Activation::create($user); 

      $activation_code = $activation->code; 

      if ($user) { 

       Mail::send('emails.auth.activate', ['link' => URL::route('account-activate', [$user->id, $activation_code]), 'username' => $user->username], function($message) use ($user) { 

        $message->to($user->email, $user->username)->subject('Activate your account'); 

       }); 

       return Redirect::route('home')->with('global', 'Thank you for registering! We have sent you an email to activate your account'); 

      } 

     }  

    } 

我是否改變,像這樣

$user = Sentinel::register($credentials); 

$user = Sentinel::findById(1); 

$role = Sentinel::findRoleByName('Subscribers'); 

$role->users()->attach($user); 

事情是我還沒有創建任何角色開始與代碼。我們在哪裏編寫該功能?現在,我有以下控制器

  1. 的AccountController - 處理激活的
  2. AuthController - 處理登錄/退出
  3. 這個RegistrationController - 處理的用戶註冊
  4. RolesController - 我不是這裏面寫的任何東西。我有點失落。

請指導我。任何幫助是極大的讚賞。

+0

我有同樣的問題。任何幫助是極大的讚賞。 – Michael 2014-10-04 23:38:01

回答

5

如果您已經註冊了您的用戶,則不需要搜索您的用戶,註冊方法會返回用戶。 你可以做以下的角色附加到用戶:

$user = Sentinel::register($credentials); 
$role = Sentinel::findRoleByName('Subscribers'); 
$role->users()->attach($user); 
// OR 
$user->roles()->attach($role); 

您同時擁有用戶和角色對象,他們有一個多對多的關係,所以它不會不管你使用哪一個。

您將需要創建一個數據庫播種器或方法來創建您的權限。但是,創建您的訂閱者的角色,你需要做到以下幾點:

Sentinel::getRoleRepository()->createModel()->create([ 
    'name' => 'Subscribers', 
    'slug' => 'subscribers', 
    'permissions' => [ 
     'user.view' => true, 
     'user.delete' => false, 
     // any other permissions you want your Subscribers to have 
    ] 
]); 

類似的呼叫可以建立你的管理員角色,以及。

您的角色模型和控制器已經爲您創建,您只需要通過Sentinel訪問它們,您已經有Sentinel::findRoleByName('Subscribers');調用。

Cartalyst有關於建立角色和權限爲您的用戶一些相當體面的文件:

這只是一個你想要的每個角色搞清楚的事做或不做。 另外,您可以爲每個用戶設置特定的權限以覆蓋角色權限。

+0

我有一個問題,'user.view'或'user.delete'中的'user'代表什麼,是模型名稱還是什麼,。 – Praditha 2016-04-18 10:19:30

+1

這些引用了您在檢查權限時引用的實際權限名稱,因此權限名稱user.view => true意味着稍後在代碼中您將調用if($ user-> hasAccess(['user')。查看']))'那就是說,這個當前用戶是否有權查看被叫用戶。 – codivist 2016-04-20 20:37:16

+0

雅,我知道,只有命名約定,以便以後檢查權限。感謝@codivist。 – Praditha 2016-04-21 04:18:37