我想进行权限检查,如果用户没有权限,则不允许他们访问某些页面和按钮。在我的数据库中,我有一个用于用户、权限的表,然后有一个permission_user 表来为每个用户分配权限。
现在,我有一些页面,其中显示一个表格,其中包含所有数据摘要,并且那里有一组按钮(查看、编辑等),有些用户无法执行所有这些操作,所以我想要这些按钮隐形/禁用。如果他们在 URL 中键入这些按钮(例如 public/admin/edit/id),我不希望他们访问与这些按钮链接的受限页面。
以下是当前可用的权限
PermissionID PermissionName
1 View
2 Add
3 Edit
4 Delete
现在在我的 requests_user 表中是这样的
PermissionID AccountID
1 2
这是我的 Controller 的一部分
public function showDetails($action, $id)
{
return view('pages.admin.form_details', ['action' => $action, 'id' => $id]);
}
此示例函数将显示详细信息页面并返回操作(查看或编辑的字符串),然后在我的 Blade 中完成查看或编辑页面的显示检查。如果可能的话,我想一次进行所有检查(就像用户是否通过中间件登录或未登录时如何检查每个页面一样)。我实际上尝试过 zizaco entrust,但我不明白如何实现它并最终将其从我的项目中删除。
我一直在考虑在每个页面 Controller 的显示函数中执行类似的操作。
if($action == "edit)
//check if edit permission exists for the authenticated user. if not abort and show error page.
我认为这样做效率低且重复。会有更好的解决方案吗?或者也许是一个我可以更容易集成的包?
最佳答案
Laravel 5.2 为此提供了适当的功能:Authorizations
我更喜欢使用策略来定义功能,因为如果您的应用程序增长,它们可以更具可扩展性。
注册政策
protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ]; public function boot(GateContract $gate) { $this->registerPolicies($gate); }
定义策略
public function index(User $user) { return // your validation; } public function create(User $user) { return // your validation; }
检查政策
在你的 Controller 中:
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
重要的是检查 Controller 中的策略,以这种方式使用它,如果用户没有正确的权限,则不会被允许执行任何后续步骤。
另一方面,其他 SO 用户提到了一些软件包,但您的请求非常简单,因此您可以使用 Laravel 的授权。
关于php - Laravel 5.2 自定义用户权限检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42511162/