如何在Laravel中动态添加门?

时间:2018-08-14 08:31:05

标签: php laravel-5 php-7

如何在Laravel中动态添加门? 我在laravel上构建了CMS,它支持插件。插件可以在仪表板,某些页面,路线等中添加菜单项。例如,我需要使用gate来保护编辑/删除/添加/更改页面,例如授权用户未创建的页面。 因此,我需要每个插件都可以动态添加此权限(查看/ add / edit / update / delete /) 我该怎么做? 并且btw插件位于APP / Plugins文件夹中。 管理员可以将此权限附加到某些角色http://prntscr.com/kidnxz https://pastecode.xyz/view/bcb9d00f这是我的示例表。 我还需要在权限表权限中添加的问题 我使用laravel 5.6

这里是简单插件的示例pastecode.xyz/view/75d2fa28加载插件时调用启动,并在用户激活该插件时onActivate

我正在寻找动态策略

或类似https://octobercms.com/docs/plugin/registration

  'permissions' => ['acme.blog.*'],

1 个答案:

答案 0 :(得分:0)

您可以使用Gate::policy(PolicyTarget::class, PolicyImplementation::class)在插件中注册新的登门策略。

假设您有一个政策目标,例如一个用户(也许是一个不好的例子)。

使用php artisan make:policy UserInteractsWithBlogPolicy

class UserInteractsWithBlogPolicy {
   // Boilerplate and custom code
}

然后您可以在插件启动时进行注册:

 public function boot() {
            // TODO: Implement boot() method.
            $this->enableRoutes();
            $this->enableViews();
            \Gate::policy(User::class, UserInteractsWithBlogPolicy::class); 

}

然后,您可以使用常规策略规则,例如

 $user->can("view", Blog::find(1));

或者基本上可以按照https://laravel.com/docs/5.6/authorization#authorizing-actions-using-policies

做任何事情