{"id":15024958,"url":"https://github.com/mara/mara-acl","last_synced_at":"2025-04-12T13:11:23.684Z","repository":{"id":18560949,"uuid":"84610430","full_name":"mara/mara-acl","owner":"mara","description":"Default ACL implementation for Mara","archived":false,"fork":false,"pushed_at":"2023-11-21T15:22:37.000Z","size":1963,"stargazers_count":2,"open_issues_count":3,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-10T12:16:59.822Z","etag":null,"topics":["acl","backend","flask","mara","python","ui"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mara.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-03-10T23:52:51.000Z","updated_at":"2021-10-01T19:38:02.000Z","dependencies_parsed_at":"2023-01-13T19:54:06.974Z","dependency_job_id":"1907cc92-0c15-4f7a-a48b-45362fb44a79","html_url":"https://github.com/mara/mara-acl","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mara%2Fmara-acl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mara%2Fmara-acl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mara%2Fmara-acl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mara%2Fmara-acl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mara","download_url":"https://codeload.github.com/mara/mara-acl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248571883,"owners_count":21126522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acl","backend","flask","mara","python","ui"],"created_at":"2024-09-24T20:01:16.586Z","updated_at":"2025-04-12T13:11:23.647Z","avatar_url":"https://github.com/mara.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mara ACL\n\n[![mara-acl](https://github.com/mara/mara-acl/actions/workflows/build.yaml/badge.svg)](https://github.com/mara/mara-page/actions/workflows/build.yaml)\n[![PyPI - License](https://img.shields.io/pypi/l/mara-acl.svg)](https://github.com/mara/mara-acl/blob/main/LICENSE)\n[![PyPI version](https://badge.fury.io/py/mara-acl.svg)](https://badge.fury.io/py/mara-acl)\n[![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack\u0026style=social)](https://communityinviter.com/apps/mara-users/public-invite)\n\nDefault ACL implementation for mara with the following design choices:\n\n- Authentication of users is handled externally, e.g. through a [OAuth2 Proxy](https://github.com/oauth2-proxy/oauth2-proxy).\n  An upstream authentication app manages authentication and then adds a http header identifying the user to each authenticated request.\n- Each user is assigned a single role.\n- Permissions are not based on urls, but on application-defined \"resources\".\n  Thus, checking of permissions needs to be done in the application.\n\nThe ACL provides a single UI for both user and permission management.\nUsers can be added / removed and their roles can be changed like this:\n![User management](https://github.com/mara/mara-acl/raw/main/docs/_static/users-and-roles.gif)\n\nNew roles are created by moving a user to a new role.\n\nPermissions can be set for\n\n- an individual user or a whole role,\n- an individual resource, a group of resources or \"All\" resources.\n\nIndividual users inherit permissions from their role, and permissions on higher levels overwrite permissions on lower levels:\n![User management](https://github.com/mara/mara-acl/raw/main/docs/_static/permissions.gif)\n\n\nEach new user that is authenticated is automatically created\nwith a default role in the acl:\n![User management](https://github.com/mara/mara-acl/raw/main/docs/_static/automatic-user-creation.png)\n\nThis behavior can be switched off (so that only invited users can join). See [config.py](https://github.com/mara/mara-acl/blob/main/mara_acl/config.py) for details.\n\n\nPlease have a look at the mara example application for how to integrate this ACL implementation.\n\n\n## Links\n\n* Documentation: https://mara-acl.readthedocs.io/\n* Changes: https://mara-acl.readthedocs.io/en/stable/changes.html\n* PyPI Releases: https://pypi.org/project/mara-acl/\n* Source Code: https://github.com/mara/mara-acl\n* Issue Tracker: https://github.com/mara/mara-acl/issues/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmara%2Fmara-acl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmara%2Fmara-acl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmara%2Fmara-acl/lists"}