2017-02-28 93 views
1

我願做一個權限檢查,將禁止訪問特定頁面和按鈕的用戶,如果他們沒有權限。在我的數據庫中,我有一個用戶表,權限表,然後是一個permission_user表,爲每個用戶分配權限。Laravel 5.2自定義用戶權限檢查

現在,我有其中顯示與數據的所有彙總表頁面,並有一組按鈕有(查看,編輯等)和一些用戶不能做所有這些,所以我想這些按鈕不可見/禁用。我不想讓他們訪問使用這些按鈕鏈接的受限制的頁面,如果他們在URL中鍵入它(例如公共/管理/編輯/ ID)。

下面是目前可用的權限

PermissionID PermissionName 
     1   View 
     2   Add 
     3   Edit 
     4   Delete 

現在在我的permissions_user表就是這個樣子

PermissionID AccountID 
     1    2 

這裏是我的一塊控制器

public function showDetails($action, $id) 
    { 
     return view('pages.admin.form_details', ['action' => $action, 'id' => $id]); 
    } 

這個例子功能將顯示詳細信息頁面並返回操作(字符串,可以是查看或編輯)然後檢查顯示視圖或編輯頁面是否在我的刀片中完成。如果可能的話,我想要做的所有檢查一次(就像你在每一頁如何檢查,如果用戶登錄或不通過中間件)。我實際上嘗試過zizaco委託,但我不明白如何實現它,並最終將其從我的項目中刪除。

我一直在考慮在每個頁面控制器的show function中做這樣的事情。

if($action == "edit) 
//check if edit permission exists for the authenticated user. if not abort and show error page. 

我認爲這是低效率和重複這樣做。會有更好的解決方案嗎?或者,也許我可以整合更簡單的軟件包?

回答

1

Laravel 5.2有這樣的正常功能:Authorizations

我更喜歡使用策略來定義的能力,因爲他們可能是,如果您的應用程序的增長更具可擴展性。

  1. 註冊政策

    protected $policies = [ 
        'App\Model' => 'App\Policies\ModelPolicy', 
    ]; 
    
    public function boot(GateContract $gate) 
    { 
         $this->registerPolicies($gate); 
    } 
    
  2. 定義策略

    public function index(User $user) 
    { 
        return // your validation; 
    } 
    
    public function create(User $user) 
    { 
        return // your validation; 
    } 
    
  3. 檢查政策

在你的控制器:

public function store(ModelRequest $request) 
{ 
    $this->authorize('create', $model); 
    // your code to create a new model 
} 

在你看來:

@can('create', $post) 
    <!-- If user can create a model --> 
@endcan 

重要的是在控制器檢查政策,以這種方式使用它,用戶不會被允許進行任何的後續步驟,如果他沒有正確的權限。

另一方面,其他SO用戶提到了一些軟件包,但您的請求非常簡單,因此您可以使用Laravel的授權。

+0

感謝您的回答!這對我來說非常有幫助,因爲我發現文檔混亂。 –

+0

不客氣... – georgeos

0

Laravel 5.2具有管理權限的內置方法:

https://laravel.com/docs/5.2/authorization

政策是特別好,他們所代表的那種你正在尋找的權限。

如果你需要更多的功能,看看laravel-permissionpackage spatie,它增加了很多功能,如角色管理。

+0

Spatie可能不錯。我會嘗試再次閱讀文檔以理解它。謝謝。 –

+0

我打算推薦laravel-permission軟件包。我剛剛在我的應用程序中實現了這個軟件包,而且值得花時間瞭解它的工作方式,而不是試圖編寫自己的/重複的代碼。 – cbloss793

0

Laravel包含一個授權系統,該系統應該可以根據需要工作。你已經檢查過了嗎? https://laravel.com/docs/5.2/authorization

+0

我做到了,但我真的不太明白。這將與我的項目結構一起工作嗎? –