PermissionResultΒΆ

If you want to add the reason for permission denial, you can use PermissionResult class, which acts like a bool, but also stores a message:

from permission_manager import PermissionResult

class Manager(BasePermissionManager):
    def has_create_permission(self) -> bool:
        return PermissionResult('Creation is prohibited.')


Manager().has_permission('create')
> PermissionResult(value=False, message=['Creation is prohibited.'])

You can pass multiple messages:

PermissionResult(['Creation is prohibited.', 'Try later.'])
> PermissionResult(value=False, message=['Creation is prohibited.', 'Try later.'])

Of course, you can change the value:

PermissionResult(
    message='Test message',
    value=True,
)
> PermissionResult(value=True, message=['Test message'])

By default, the .resolve() method of a permission manager only returns message if the value is False. However, you can change this behavior, for example, to provide some hints.:

PermissionResult(
    message='Test message',
    value=True,
    message_if_true=True,
)