jreviews:permission:field.write
Filters whether a user has permission to see and edit a custom field in listing/review submit and edit forms.
You need to have a working knowledge of Hooks before you get started.
Fires when checking if user can access a custom field in submit/edit forms
Parameters
| Name | Type | Description |
|---|---|---|
$canWrite |
bool |
Whether the user can edit the field |
$user |
\JReviews\App\Models\User |
The user attempting to edit |
$field |
\JReviews\App\Models\Field |
The custom field |
Boilerplate Code
Use the boilerplate code to start using the filter, and add your own logic to modify the first argument and return it.
fwd_add_filter('jreviews:permission:field.write', function($canWrite, $user, $field)
{
// Your code here
return $canWrite;
}, 20, 3);
The , 20, N after your callback are the hook priority and the number of arguments your callback accepts. By default, a hook passes your callback only its first argument; for a filter, that is the value being filtered, so a simple function($value) { ... } needs nothing extra. If your callback declares more parameters, such as function($value, $listing) { ... }, you must add N (the parameter count, 2 here). Because N is the fourth argument to fwd_add_filter() or fwd_add_action(), you must also pass the priority (20 is the default). Leaving these off when your callback expects extra parameters causes a Too few arguments to function ... fatal error.
Examples
Prevent Changes to Custom Fields Content on Listing Updates
In this example users can fill out the content for fields `jr_fieldone`, `jr_fieldtwo`, `jr_fieldthree` while creating a new listing, but they are prevented from changing them afterwards. Only administrators will have access to the fields while editing listings. Note: You may need to check the request context to determine if this is a create or update operation.
fwd_add_filter('jreviews:permission:field.write', function($canWrite, $user, $field)
{
$fieldNames = ['jr_fieldone', 'jr_fieldtwo', 'jr_fieldthree'];
// Allow managers full access
if ($user->isManager()) {
return $canWrite;
}
// Check if this is an update operation (you may need to access the request)
$isUpdate = request()->route()->getName() === 'listing.update';
// Allow field access during creation, but not updates
if ($isUpdate && in_array($field->name, $fieldNames)) {
return false;
}
return $canWrite;
}, 20, 3);
Source Files
app/Policies/FieldPolicy.php