如何在多个策略文件中重用同一函数

  • 本文关键字:函数 文件 策略 laravel
  • 更新时间 :
  • 英文 :


这个函数将被许多策略使用。如何避免将其写入每个策略文件中?

public function checkRoleAndPermission($name)
{
$content = 'Location';
$permission = Permission::where([['content', $content], ['name', $name]])->first();
if(empty($permission))
return false;
return auth()->user()->hasRole($permission->roles);
}

最佳做法是创建一个BasePolicy并从中扩展所有其他

class BasePolicy 
{
public function checkRoleAndPermission($name)
{
$content = 'Location';
$permission = Permission::where([['content', $content], ['name', $name]])->first();
if(empty($permission))
return false;
return auth()->user()->hasRole($permission->roles);
}
}
class PostPolicy extends BasePolicy
{
public function update(User $user, Post $post, $rolePermission)
{
$this->checkRoleAndPermission($rolePermission);
...
}
}
```

使用上述函数"checkRoleAndPermission"创建一个类。 如果需要,扩展类并重用如下所示的函数。

A类:

public class A{
public function checkRoleAndPermission($name)
{
$content = 'Location';
$permission = Permission::where([['content', $content], ['name', $name]])->first();
if(empty($permission)) return false;
return auth()->user()->hasRole($permission->roles);
}
}

B类:

use A;
public class B extends A{
$this->checkRoleAndPermission('name'); // it will call class A's checkRoleAndPermission() function
}

最新更新