我们应该在哪里放置授权码? FormRequest,Policies,Controller,Middleware ......?

时间:2016-10-07 17:18:39

标签: laravel authorization

Laravel中的授权码应该放在哪里?我们有很多选项和很多插件来管理这种情况,但我并不确定我应该把所有逻辑放在哪里。我们来看看:

我知道有很多可能得到正确的结果,但我想知道哪种是最佳解决方案,或者在这种情况下了解您的技术。

想象一下,我们在vuejs和Laravel中将帮助台应用程序作为API完成,因此我们拥有用户,组,角色和权限。也许用户只能看到它的门票。

  1. 我们应该使用查看,更新,创建方法来执行TicketPolicy吗?也许我们应该使用存储库?可能是Ticket模型中的is_user_allowed方法?
  2. 我们是否应该在路由文件中使用中间件并执行类似Route :: get('tickets / {ticket}','TicketsController @ show') - > middleware('can:show')?或者我们应该在控制器的显示,编辑,更新和存储方法中调用$ this-> authorize($ ticket)吗?
  3. 或者我们应该使用FormRequest @ authorize方法,然后使用$ user-> authorize('show',$ ticket)?
  4. 如果我们想要团体或角色怎么办?我们应该使用像Entrust和/或政策这样的插件吗?
  5. 你怎么想,你做什么?

1 个答案:

答案 0 :(得分:0)

我发现放置那些不符合标准MVC模式的特定逻辑的类的最佳位置是Laravel的全新文件夹。我将我的服务命名为,可能是因为我在某处读到了它。 Laravel(可能还有其他现代框架)的一个好处就是灵活性,你可以弹出一个文件夹,添加一个新的命名空间,并让它包含你需要的任何内容。

至于您的示例,我将实现一个类App \ Services \ Permissions,其中包含用于访问应用程序中不同资源的所有必要逻辑。然后在任何需要的地方调用它的方法,无论是请求,中间件还是雄辩的模型。