diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 76e85b80ce6b..7eb00f722853 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -450,7 +450,7 @@ class BaseController extends Controller 'company.bank_transactions'=> function ($query) use ($updated_at, $user) { $query->where('updated_at', '>=', $updated_at); - if (! $user->isAdmin()) { + if (! $user->hasPermission('view_bank_transaction')) { $query->where('bank_transactions.user_id', $user->id); } }, @@ -796,7 +796,7 @@ class BaseController extends Controller 'company.bank_transactions'=> function ($query) use ($created_at, $user) { $query->where('created_at', '>=', $created_at); - if (! $user->isAdmin()) { + if (! $user->hasPermission('bank_transactions')) { $query->where('bank_transactions.user_id', $user->id); } }, diff --git a/app/Policies/BankTransactionPolicy.php b/app/Policies/BankTransactionPolicy.php index 00b57861aa6d..9819e0768bc6 100644 --- a/app/Policies/BankTransactionPolicy.php +++ b/app/Policies/BankTransactionPolicy.php @@ -26,6 +26,6 @@ class BankTransactionPolicy extends EntityPolicy */ public function create(User $user) : bool { - return $user->isAdmin(); + return $user->isAdmin() || $user->hasPermission('create_invoice') || $user->hasPermission('create_all'); } } diff --git a/tests/Unit/PermissionsTest.php b/tests/Unit/PermissionsTest.php index 91fa3e9854a0..71a64962a1ee 100644 --- a/tests/Unit/PermissionsTest.php +++ b/tests/Unit/PermissionsTest.php @@ -13,10 +13,12 @@ namespace Tests\Unit; use App\Factory\CompanyUserFactory; use App\Models\Account; +use App\Models\Client; use App\Models\Company; use App\Models\CompanyToken; use App\Models\CompanyUser; use App\Models\Invoice; +use App\Models\RecurringInvoice; use App\Models\User; use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\MockAccountData; @@ -77,6 +79,21 @@ class PermissionsTest extends TestCase } + public function testPermissionResolution() + { + $class = 'view'.lcfirst(class_basename(\Illuminate\Support\Str::snake(Invoice::class))); + + $this->assertEquals('view_invoice', $class); + + $class = 'view'.lcfirst(class_basename(\Illuminate\Support\Str::snake(Client::class))); + $this->assertEquals('view_client', $class); + + + $class = 'view'.lcfirst(class_basename(\Illuminate\Support\Str::snake(RecurringInvoice::class))); + $this->assertEquals('view_recurring_invoice', $class); + + } + public function testExactPermissions() {