ldc-crm/app/Policies/ClaimMailTemplatePolicy.php

109 lines
3.2 KiB
PHP

<?php
namespace App\Policies;
use App\Enums\Users\RoleEnum;
use App\Models\ClaimMailTemplate;
use App\Models\User;
use App\Policies\Rules\UserStaticRules;
class ClaimMailTemplatePolicy
{
/**
* ViewAny a claim subject.
*
* @param \App\Models\User $authUser
* @return boolean
*/
public function viewAny(User $authUser): bool
{
return UserStaticRules::atLeastRole($authUser, RoleEnum::marketing);
}
/**
* View a claim subject.
*
* @param \App\Models\User $authUser
* @param \App\Models\ClaimMailTemplate $claim_mail_template
* @return boolean
*/
public function view(User $authUser, ClaimMailTemplate $claim_mail_template): bool
{
return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim_mail_template);
}
/**
* Create a claim subject.
*
* @param \App\Models\User $authUser
* @return boolean
*/
public function create(User $authUser): bool
{
return UserStaticRules::atLeastRole($authUser, RoleEnum::marketing);
}
/**
* Store a claim subject.
*
* @param \App\Models\User $authUser
* @return boolean
*/
public function store(User $authUser): bool
{
return UserStaticRules::atLeastRole($authUser, RoleEnum::marketing);
}
/**
* Edit a claim subject.
*
* @param \App\Models\User $authUser
* @param \App\Models\ClaimMailTemplate $claim_mail_template
* @return boolean
*/
public function edit(User $authUser, ClaimMailTemplate $claim_mail_template): bool
{
return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim_mail_template);
}
/**
* Update a claim subject.
*
* @param \App\Models\User $authUser
* @param \App\Models\ClaimMailTemplate $claim_mail_template
* @return boolean
*/
public function update(User $authUser, ClaimMailTemplate $claim_mail_template): bool
{
return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim_mail_template);
}
/**
* Delete a claim subject.
*
* @param \App\Models\User $authUser
* @param \App\Models\ClaimMailTemplate $claim_mail_template
* @return boolean
*/
public function delete(User $authUser, ClaimMailTemplate $claim_mail_template): bool
{
return $this->checkOnlyMinAdminOrInUserBrands($authUser, $claim_mail_template);
}
/**
* Check if the user an access a specific resource.
*
* @param \App\Models\User $authUser
* @param \App\Models\ClaimMailTemplate $claim_mail_template
* @return boolean
*/
private function checkOnlyMinAdminOrInUserBrands(User $authUser, ClaimMailTemplate $claim_mail_template): bool
{
$userBrandModelKeys = $authUser->brands->modelKeys();
$claimMailTemplateModelKey = $claim_mail_template->brand->getKey();
return UserStaticRules::atLeastRole($authUser, RoleEnum::admin) || (
UserStaticRules::atLeastRole($authUser, RoleEnum::marketing)
&& \in_array($claimMailTemplateModelKey, $userBrandModelKeys)
);
}
}