diff --git a/app/Http/Controllers/TemplateController.php b/app/Http/Controllers/TemplateController.php index 35190cd..92a28c3 100644 --- a/app/Http/Controllers/TemplateController.php +++ b/app/Http/Controllers/TemplateController.php @@ -17,7 +17,7 @@ class TemplateController extends Controller public function create(CreateTemplateRequest $request) { - $this->middleware('admin'); + $this->authorize('create', Template::class); // Create template $template = $request->getTemplate(); @@ -28,5 +28,4 @@ class TemplateController extends Controller 'template_id' => $template->id ]); } - } diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 6a99033..cfabaa0 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -18,6 +18,7 @@ class UserResource extends JsonResource 'is_subscribed' => $this->is_subscribed, 'has_enterprise_subscription' => $this->has_enterprise_subscription, 'admin' => $this->admin, + 'template_editor' => $this->template_editor, 'has_customer_id' => $this->has_customer_id, 'has_forms' => $this->has_forms, ] : []; diff --git a/app/Models/User.php b/app/Models/User.php index 436cb87..5b5dba1 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -99,6 +99,11 @@ class User extends Authenticatable implements JWTSubject //, MustVerifyEmail return in_array($this->email, config('services.admin_emails')); } + public function getTemplateEditorAttribute() + { + return $this->admin || in_array($this->email, config('services.template_editor_emails')); + } + /** * ================================= * Helper Related diff --git a/app/Policies/TemplatePolicy.php b/app/Policies/TemplatePolicy.php new file mode 100644 index 0000000..935a181 --- /dev/null +++ b/app/Policies/TemplatePolicy.php @@ -0,0 +1,23 @@ +template_editor; + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index c797714..65c06ac 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -4,10 +4,12 @@ namespace App\Providers; use App\Models\Forms\Form; use App\Models\Integration\FormZapierWebhook; +use App\Models\Template; use App\Models\Workspace; use App\Models\User; use App\Policies\FormPolicy; use App\Policies\Integration\FormZapierWebhookPolicy; +use App\Policies\TemplatePolicy; use App\Policies\WorkspacePolicy; use App\Policies\UserPolicy; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; @@ -22,7 +24,8 @@ class AuthServiceProvider extends ServiceProvider protected $policies = [ Form::class => FormPolicy::class, Workspace::class => WorkspacePolicy::class, - FormZapierWebhook::class => FormZapierWebhookPolicy::class + FormZapierWebhook::class => FormZapierWebhookPolicy::class, + Template::class => TemplatePolicy::class, ]; /** diff --git a/config/services.php b/config/services.php index 52c3257..403502f 100644 --- a/config/services.php +++ b/config/services.php @@ -52,5 +52,6 @@ return [ 'amplitude_code' => env('AMPLITUDE_CODE'), 'crisp_website_id' => env('CRISP_WEBSITE_ID'), - 'admin_emails' => explode(",", env('ADMIN_EMAILS') ?? '') + 'admin_emails' => explode(",", env('ADMIN_EMAILS') ?? ''), + 'template_editor_emails' => explode(",", env('TEMPLATE_EDITOR_EMAILS') ?? '') ]; diff --git a/resources/js/components/pages/forms/show/ExtraMenu.vue b/resources/js/components/pages/forms/show/ExtraMenu.vue index e4cce28..6e9a5fd 100644 --- a/resources/js/components/pages/forms/show/ExtraMenu.vue +++ b/resources/js/components/pages/forms/show/ExtraMenu.vue @@ -67,7 +67,7 @@ Duplicate form -