2016-03-04 60 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方法。