{"id":15287371,"url":"https://github.com/orbitale/permissionsbundle","last_synced_at":"2025-04-13T05:08:59.827Z","repository":{"id":57032759,"uuid":"88053122","full_name":"Orbitale/PermissionsBundle","owner":"Orbitale","description":"Use expression based permissions instead of roles or voters to simplify your security in Symfony. Feel free to contribute ! :+1: Project was initiated after this discussion: https://github.com/symfony/symfony/issues/21029","archived":false,"fork":false,"pushed_at":"2020-06-14T16:06:19.000Z","size":9,"stargazers_count":18,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-13T05:08:45.143Z","etag":null,"topics":["bundle","permissions","security","symfony","symfony-bundle"],"latest_commit_sha":null,"homepage":"","language":"PHP","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/Orbitale.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"Security/Provider/PermissionsFunctionsProvider.php","support":null}},"created_at":"2017-04-12T13:09:38.000Z","updated_at":"2021-08-13T16:32:22.000Z","dependencies_parsed_at":"2022-08-23T20:50:27.993Z","dependency_job_id":null,"html_url":"https://github.com/Orbitale/PermissionsBundle","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orbitale%2FPermissionsBundle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orbitale%2FPermissionsBundle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orbitale%2FPermissionsBundle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Orbitale%2FPermissionsBundle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Orbitale","download_url":"https://codeload.github.com/Orbitale/PermissionsBundle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665747,"owners_count":21142123,"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":["bundle","permissions","security","symfony","symfony-bundle"],"created_at":"2024-09-30T15:27:58.018Z","updated_at":"2025-04-13T05:08:59.802Z","avatar_url":"https://github.com/Orbitale.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"Permissions bundle\n==================\n\nThe goal of this bundle is to add simple ExpressionLanguage based permissions to Symfony,\nto rely on something with more logic than Roles and less heavy than creating Voters.\n\n## Install\n\n* Require it with composer\n\n  ```bash\n  $ composer require orbitale/permissions-bundle\n  ```\n\n* Add the bundle to your kernel\n\n  ```php\n  \u003c?php\n\n  class AppKernel extends Kernel\n  {\n      public function registerBundles()\n      {\n          $bundles = [\n              // ...\n              new Orbitale\\Bundle\\PermissionsBundle\\PermissionsBundle(),\n          ];\n\n          return $bundles;\n      }\n  }\n  ```\n\n* Setup your desired permissions:\n\n  ```yaml\n  # app/config/security.yml\n  permissions:\n      rules:\n          ADMIN_EDIT: 'user and user.getStatus() === constant(\"AppBundle\\\\Entity\\\\User::STATUS_ADMIN\")'\n          SUBSCRIBE: 'user and user.isMemberOfTheTeam()'\n          CHUCK_NORRIS: 'user and user.getUsername() === \"Chuck Norris\"'\n  ```\n\n* Use them in your controllers\n\n  ```php\n  \u003c?php\n\n  namespace AppBundle\\Controller;\n\n  use Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller;\n\n  class DefaultController extends Controller\n  {\n      public function badassAction()\n      {\n          $this-\u003edenyAccessUnlessGranted('CHUCK_NORRIS');\n\n          // ...\n      }\n  }\n  ```\n\n## Configuration reference\n\n```yaml\npermissions:\n    defaults:\n        # Variables to add to ExpressionLanguage, for easier access if you need\n        expression_variables: []\n\n        # Will be added to all not already set \"supports\" attributes\n        supports:             null\n    rules:\n        # Full prototype\n        # Key names *must* be uppercase\n        PERMISSION_KEY_NAME:\n            supports: null\n            on_vote: null   # Required\n\n        # Allow expression with a single string, if you don't care of \"supports\":\n        PERMISSION_KEY_NAME: 'on_vote expression'\n```\n\n## Real life example\n\n```yaml\npermissions:\n    defaults:\n        expression_variables:\n            user_class: AppBundle\\Entity\\User\n            post_class: AppBundle\\Entity\\Post\n        supports: 'instanceof(user, user_class)'\n    rules:\n        ADMIN: 'user.isAdmin()'\n        EDIT_POST:\n            supports: 'instanceof(user, user_class) and instanceof(subject, post_class)'\n            on_vote: 'user.isAdmin() and subject.getAuthor().getId() === user.getId()'\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forbitale%2Fpermissionsbundle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forbitale%2Fpermissionsbundle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forbitale%2Fpermissionsbundle/lists"}