Entity authorizations

You can check documentation of authorizations for Commands or Entity States. Here we are going to see how we can define authorizations for an entity.

Available permissions

Entities have five permission keys:

  • entity: to see the entity in the side-menu, and to display its list. Without this, the entity is hidden to the user.
  • view: without this, the user can access the Entity list, but not the form.
  • update: without this, the user can see the form, but in readonly.
  • create: without this, the user can't display the create form.
  • delete: without this, the user can't delete an instance.

Global authorizations

As a first step, in some cases you will want to forbid some actions to anyone: just an application rule, like "no one can delete an Order", or "no one can edit a User".

Just add the rule in a special authorizations key in the config:

// in config/sharp.php

"entities" => [
    "spaceship" => [
        "list" => \App\Sharp\SpaceshipSharpList::class,
        [...]
        "authorizations" => [
            "delete" => false,
            "create" => false,
        ]
    ]
]

Note that you can't define here the entity permission.

Policies

For user-based rules, create a Laravel Policy class which is just a plain class defining methods for some (or all) permissions.

Write the class

class SpaceshipPolicy
{

    public function entity(User $user)
    {
        return sharp_user()->hasGroup('admin');
    }

    public function view(User $user, $spaceshipId)
    {
        return sharp_user()->owner_id == $user->id;
    }

    public function update(User $user, $spaceshipId)
    {
        [...]
    }

    public function delete(User $user, $spaceshipId)
    {
        [...]
    }

    public function create(User $user)
    {
        [...]
    }
}

Only write methods which don't return true, as this is the default behaviour.

Configure the policy

This is straightforward:

// in config/sharp.php

"entities" => [
    "spaceship" => [
        "list" => \App\Sharp\SpaceshipSharpList::class,
        [...]
        "policy" => \App\Sharp\Policies\SpaceshipPolicy::class,
    ]
]
Last Updated:
Contributors: antoine