I put this in HandleInertiaRequests Middleware so the permissions are available automatically on the front end.
'auth' => [
'user' => fn () => $request->user(),
'permissions' => fn () => $request->user()?->getAllPermissions()->pluck('name')
],
and then wrote a helper function to check the permission:
function hasPermission(permissions, permissionToTest) {
let hasPermission = false;
permissions.forEach((permission) => {
if (permission === permissionToTest) {
hasPermission = true;
} else if (permission.includes(".*")) {
const permissionParts = permission.split(".");
const permissionToTestParts = permissionToTest.split(".");
if (
permissionParts.length === permissionToTestParts.length &&
permissionParts[0] === permissionToTestParts[0]
) {
hasPermission = true;
}
}
});
return hasPermission;
}
Now I can test permissions in Vue using something like hasPermission($page.props.auth.permissions, 'user.index').
It works perfect.
Would it be possible to have $page.props.auth.permissions available to the function automatically so I don't have to pass it in every time?