检查对象权限的最佳位置在哪里?

Where is the best place to check permissions of an object?

我正在为我的应用程序使用 Laravel,我想问一下检查对象权限的最佳位置。

每个模型都有 checkPermissions() 方法。

因此,如果用户请求更改模型,客户端路由器将调用控制器中的 updateClient() 方法。我应该这样做吗:

$client = Client::find(Input::get('id'));
$client->checkPermissions();

或者我应该创建一个新方法来获取客户端并检查其中的权限吗? :

$client = Client::getClientById($id);

其中 getClientById() 是在客户端模型上定义的方法,它检查权限...

您能否也描述一下您选择一个或另一个解决方案的原因? 谢谢

没有一个'best place'。这将取决于您的应用程序。

但实际上有两种选择。

  1. 在过滤器中。这样您就可以在请求到达您的控制器之前对其进行过滤,并确保他们可以访问他们尝试访问的记录

  2. 在控制器中,使用上面给出的示例。

在模型内部进行身份验证不是一个好主意 - 模型应该只专注于获取数据,而不是进行身份验证。

您可以使用 模板步骤 定义访问机制(检查权限,然后从您的控制器内部访问数据)。我同意 @theshiftchange 模型不应该是了解权限等..