user()->can('create_members') || $this->user()->hasRole('admin'); } /** * Get the validation rules that apply to the request. * * @return array|string> */ public function rules(): array { return [ 'full_name' => ['required', 'string', 'max:255'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'national_id' => ['nullable', 'string', 'max:50'], 'phone' => ['nullable', 'string', 'max:50'], 'address_line_1' => ['nullable', 'string', 'max:255'], 'address_line_2' => ['nullable', 'string', 'max:255'], 'city' => ['nullable', 'string', 'max:120'], 'postal_code' => ['nullable', 'string', 'max:20'], 'emergency_contact_name' => ['nullable', 'string', 'max:255'], 'emergency_contact_phone' => ['nullable', 'string', 'max:50'], 'membership_started_at' => ['nullable', 'date'], 'membership_expires_at' => ['nullable', 'date', 'after_or_equal:membership_started_at'], ]; } /** * Get custom messages for validator errors. */ public function messages(): array { return [ 'full_name.required' => __('Full name is required.'), 'email.required' => __('Email is required.'), 'email.email' => __('Please enter a valid email address.'), 'email.unique' => __('This email is already registered.'), 'membership_expires_at.after_or_equal' => __('Expiry date must be after or equal to start date.'), ]; } }