2016-03-04 53 views
1

我目前正在試圖找出是否可以添加門Fascade到政策或是否有更好的方法來處理我的處境。門Fascade和示範政策

我有一個用戶列表的每一個具有一個角色,而每個角色可以有很多的權限。所有這些都存儲在我的數據庫中,並且在我的模型中建立了正確的關係。

我試圖顯示或不顯示根據用戶是否可以在用戶的​​我的HTML列表中刪除其他用戶的刪除圖標。

例子:

比方說USER1具有的3一個角色是一個網站的管理員。網站管理員有權刪除用戶,但他們無法刪除與他們具有相同角色或角色高於他們角色的其他用戶。

當USER1訪問/用戶URI它們被示出用戶的HTML表在數據庫中,作爲最後的表列是可以在該行該用戶行執行的操作。可用的動作圖標是編輯和刪除。對於刪除圖標,我想要運行一個策略,以確保已驗證的用戶可以先刪除用戶,但也要傳遞當前行的用戶對象,並查看用戶是否具有相同的角色ID或更高級別,在這種情況下,它不會顯示圖標。

<?php 

namespace App\Policies; 

use App\User; 

use Illuminate\Auth\Access\HandlesAuthorization; 

class UserPolicy 
{ 
    use HandlesAuthorization; 

    /** 
    * Create a new policy instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 

    public function delete(User $user) { 
     return Auth::user()->role->permission and $user->role_id < Auth::user()->role_id and $user->id != Auth::user()->id; 
    } 
} 

/reources/views/partials/tables/actions.blade.php

<td class="actions"> 
    <a href="{{ route('users.edit', $user->id) }}" class="btn btn-sm btn-icon btn-pure btn-default" data-toggle="tooltip" data-original-title="Edit"><i class="icon wb-edit" aria-hidden="true"></i></a> 
    <a href="{{ route('users.show', $user->id) }}" class="btn btn-sm btn-icon btn-pure btn-default" data-toggle="tooltip" data-original-title="Show"><i class="icon wb-eye" aria-hidden="true"></i></a> 
    @can('delete-user', $user) 
     <form class="inline" method="POST" action="{{ route('users.delete', [$user->id]) }}"> 
      {{ method_field('DELETE') }} 
      <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
      <button type="submit" class="btn btn-sm btn-icon btn-pure btn-default on-default" data-toggle="tooltip" data-original-title="Delete"><i class="icon wb-trash" aria-hidden="true"></i></button> 
     </form> 
    @endcan 
</td> 
+0

那麼你的問題是什麼? – peterm

+0

我如何檢查,而不是Auth ::() - >角色 - >權限,我可以看到他們是否有刪除用戶權限 – user3732216

回答

0

重寫你的策略方法是這樣的(我用自己的語法和假設這是真的):

public function delete(User $authUser, User $user) { 
    return $authUser->role->permission and 
      $user->role_id < $authUser->role_id and 
      $user->id != $authUser->id; 
} 

在你的策略方法,第一個參數始終是您的驗證用戶,以及其他參數是你傳遞什麼通過像@canGate::allow方法。