import os import emoji from cerbos.sdk.model import Principal, Resource from cerbos.sdk.client import CerbosClient from principals import principals from resources import resources ACTIONS = [ 'view', 'create', 'edit', 'review', ] def check_helper( client: CerbosClient, principal: Principal, action: str, resource: Resource, ): try: effect = "_cannot_" icon = emoji.emojize(":cross_mark:") if client.is_allowed(action=action, principal=principal, resource=resource): effect = "_can_" icon = emoji.emojize(":thumbs_up:") print( f"{icon} {principal.id} {effect} {action} on " f"{resource.kind} {resource.id}" ) except Exception as e: print(f"Request failed: {e}") def cerbos_check(): num_checks = 0 cerbos_server_host = os.environ.get('CERBOS_SERVER_HOST', 'http://localhost:8080') with CerbosClient(cerbos_server_host) as client: for principal in principals.PRINCIPALS: for resource in resources.RESOURCES: for action in ACTIONS: num_checks += 1 check_helper(client, principal, action, resource) print(f'Executed {num_checks} authorization checks') if __name__ == "__main__": import timeit print(timeit.timeit("cerbos_check()", number=1, setup="from __main__ import cerbos_check"))