拉拉维尔委托权限禁用文本输入



我正在尝试使用权限,如果用户拥有该权限,则用户将能够编辑表单中的文本字段,否则,该字段将被禁用。

我知道我可以在这里添加一个禁用的参数{{ Form::text('name', ['disabled' => 'disabled']) }}

我应该怎么做才能实现我需要做的事情,而不必编写两次我的 HTML 表单?这是我的表格:

@if (Auth::user()->can(Permission::EDIT_INFO))
<tr>
<th>Name 1:</th>
<td>
{{ Form::text('name') }}
</td>
<th>Name 2:</th>
<td>
{{ Form::text('name_ar') }}
</td>
</tr>
@endif

换句话说:(if有权显示正常表单else显示相同表单但禁用字段(

直接的解决方案是使用三元运算符:

<tr>
<th>Name 1:</th>
<td>{{ Form::text('name', Auth::user()->can(Permission::EDIT_INFO) ? [] : ['disabled' => 'disabled']) }}</td>
<th>Name 2:</th>
<td>{{ Form::text('name_ar', Auth::user()->can(Permission::EDIT_INFO) ? [] : ['disabled' => 'disabled']) }}</td>
</tr>

这将在Auth::user()->can(Permission::EDIT_INFO)的情况下使用[]参数数组,如果用户缺少权限,这将使用['disabled' => 'disabled']数组。

但是可能还有更好的方法可以做到这一点,因为如果您有其他参数,即当[]不为空而是类似['aria-label' => 'abc', 'maxlength' => 15]时,此解决方案也会生成重复的代码。


编辑:

还可以创建一个帮助程序方法,该方法根据权限是否存在来简化使用不同类型的参数。

如果这是您第一次定义自定义帮助程序方法,则需要一个放置它们的位置。您基本上需要一个普通的.php文件,因此app/helpers.php还可以。要加载帮助程序方法,您必须在某个时候包含该文件 - 我重新评论在AppServiceProvider::register()方法中执行此操作:

/**
* Register any application services.
*/
public function register()
{
require_once app_path().'/helpers.php';
// other code ...
}

然后,您必须在app/helpers.php文件中定义您的帮助程序方法:

<?php
if (!function_exists('merge_if_has_permission')) {
function merge_if_has_permission(string $permission, array $base, array $optional): array
{
if (Auth::user()->can($permission)) {
return array_merge($base, $optional);
}
return $base;
}
}

然后,您可以在前端使用此函数:

<td>{{ Form::text('name', merge_if_has_permission(Permission::EDIT_INFO, ['maxlength' => 15], ['disabled' => 'disabled'])) }}</td>

如果当前经过身份验证的用户具有权限Permission::EDIT_INFO,这将向表单字段添加['maxlength' => 15, 'disabled' => 'disabled']。如果用户没有此权限,则只会添加['maxlength' => 15]

由于这与你的要求完全相反(因为您希望在用户没有权限时禁用该字段(,你很可能需要另一种称为merge_if_hasnt_permission()的方法 - 但我想你现在自己找到了自己的方式。

较短的方法名称对于减少代码是有意义的...但我认为很难用更少的单词来描述函数的作用。

顺便说一下,您还可以使用此方法有条件地重写$base数组的属性。

这不是最好的方法,但它会起作用:

{{ Auth::user()->can(Permission::EDIT_INFO) ? Form::text('name') : Form::text('name', ['disabled' => 'disabled']) }}

您还应该记住检查服务器端以授权用户。

我建议您查看标准的授权文档,它与大多数 3rd 方解决方案一样具有学习曲线,但最终效果更好/更容易:https://laravel.com/docs/5.6/authorization

相关内容

  • 没有找到相关文章

最新更新