检查对象权限的最佳位置在哪里?
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'。这将取决于您的应用程序。
但实际上有两种选择。
在过滤器中。这样您就可以在请求到达您的控制器之前对其进行过滤,并确保他们可以访问他们尝试访问的记录
在控制器中,使用上面给出的示例。
在模型内部进行身份验证不是一个好主意 - 模型应该只专注于获取数据,而不是进行身份验证。
您可以使用 模板步骤 定义访问机制(检查权限,然后从您的控制器内部访问数据)。我同意 @theshiftchange 模型不应该是了解权限等..
我正在为我的应用程序使用 Laravel,我想问一下检查对象权限的最佳位置。
每个模型都有 checkPermissions() 方法。
因此,如果用户请求更改模型,客户端路由器将调用控制器中的 updateClient() 方法。我应该这样做吗:
$client = Client::find(Input::get('id'));
$client->checkPermissions();
或者我应该创建一个新方法来获取客户端并检查其中的权限吗? :
$client = Client::getClientById($id);
其中 getClientById() 是在客户端模型上定义的方法,它检查权限...
您能否也描述一下您选择一个或另一个解决方案的原因? 谢谢
没有一个'best place'。这将取决于您的应用程序。
但实际上有两种选择。
在过滤器中。这样您就可以在请求到达您的控制器之前对其进行过滤,并确保他们可以访问他们尝试访问的记录
在控制器中,使用上面给出的示例。
在模型内部进行身份验证不是一个好主意 - 模型应该只专注于获取数据,而不是进行身份验证。
您可以使用 模板步骤 定义访问机制(检查权限,然后从您的控制器内部访问数据)。我同意 @theshiftchange 模型不应该是了解权限等..