{"id":28961408,"url":"https://github.com/theronic/eacl-example","last_synced_at":"2025-06-24T02:03:05.758Z","repository":{"id":300561001,"uuid":"1006479535","full_name":"theronic/eacl-example","owner":"theronic","description":"EACL Example demonstrating ReBAC Authorization","archived":false,"fork":false,"pushed_at":"2025-06-22T11:18:19.000Z","size":1,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-22T12:26:33.861Z","etag":null,"topics":["access-control","authorization","clojure","datomic","eacl","permissions","rebac","spicedb"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/theronic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-22T11:17:35.000Z","updated_at":"2025-06-22T11:21:25.000Z","dependencies_parsed_at":"2025-06-22T12:27:12.969Z","dependency_job_id":"d65f2f09-fbf4-4f85-aac0-426274fd21e1","html_url":"https://github.com/theronic/eacl-example","commit_stats":null,"previous_names":["theronic/eacl-example"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/theronic/eacl-example","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theronic%2Feacl-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theronic%2Feacl-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theronic%2Feacl-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theronic%2Feacl-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theronic","download_url":"https://codeload.github.com/theronic/eacl-example/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theronic%2Feacl-example/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261589907,"owners_count":23181434,"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":["access-control","authorization","clojure","datomic","eacl","permissions","rebac","spicedb"],"created_at":"2025-06-24T02:03:05.247Z","updated_at":"2025-06-24T02:03:05.739Z","avatar_url":"https://github.com/theronic.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EACL: Minimal Example from Clojure\n\nThis is a minimal example that demonstrates how to use [EACL](https://github.com/CloudAfrica/eacl), an embedded [SpiceDB-compatible](https://authzed.com/spicedb)* [ReBAC](https://en.wikipedia.org/wiki/Relationship-based_access_control) authorization library built in Clojure and backed by Datomic.\n\nThe ~70 lines in [`src/eacl_example/core.clj`](./src/eacl_example/core.clj) shows the following:\n\n1. Install the latest EACL Datomic schema\n2. Transact a small permission schema with resources for users, accounts and products:\n  - where a user can own an account,\n  - a product has under an account, and\n  - users havae basic permissions.\n4. Transact some permissioned entities, which must have `:eacl/type` \u0026 `:eacl/id` attributes.\n5. Transact some relationships for `[user :owner account]` \u0026 `[account :account product]` so EACL can traverse the graph betweend `user -\u003e account \u003c- product`.\n6. Run some `eacl/can?` permission checks, which return `true` or `false`.\n7. Enumerate the resources a subject can access via `eacl/lookup-resources`.\n\n## Add EACL to a Clojure Project\n\nIf you'd like to try this from your project, you'll need the Datomic Peer library and the EACL dependencies in your `deps.edn` file:\n\n```clojure\ncloudafrica/eacl {:git/url \"git@github.com:cloudafrica/eacl.git\"\n                  :git/sha \"ed3c437ac94f3c4049e838a794f3a6987d1eb1d1\"}\n```\n(or use a newer `:git/sha`, until EACL is published on Clojars)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheronic%2Feacl-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheronic%2Feacl-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheronic%2Feacl-example/lists"}