我想进行权限检查,如果他们没有权限,将禁止用户访问某些页面和按钮。在我的数据库中,我有一个用户表,权限表,然后是权限表用于为每个用户分配权限。
现在,我有一个页面显示一个表格,其中包含所有数据摘要,并且有一组按钮(查看,编辑等),有些用户无法完成所有这些,所以我想要这些按钮隐形/禁用。我不希望他们访问与这些按钮链接的受限页面,如果他们在URL中键入它(例如public / admin / edit / 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函数中做这样的事情。
if($action == "edit)
//check if edit permission exists for the authenticated user. if not abort and show error page.
我认为这样做效率低,重复性差。会有更好的解决方案吗?或者我可以更容易整合一个包?
答案 0 :(得分:2)
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;
}
检查政策
在您的控制器中:
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的授权。
答案 1 :(得分:0)
Laravel 5.2有一个内置的授权方法:
https://laravel.com/docs/5.2/authorization
政策特别好,它们代表了您正在寻找的权限类型。
如果您需要更多功能,请通过spatie查看laravel-permission
package,它会添加许多功能,例如角色管理。
答案 2 :(得分:0)
Laravel包含一个应该根据需要运行的授权系统。你已经检查过了吗? https://laravel.com/docs/5.2/authorization