{"id":13828459,"url":"https://github.com/vyuldashev/nova-permission","last_synced_at":"2025-05-15T00:08:13.866Z","repository":{"id":32911290,"uuid":"145875855","full_name":"vyuldashev/nova-permission","owner":"vyuldashev","description":"A Laravel Nova tool for Spatie's laravel-permission library","archived":false,"fork":false,"pushed_at":"2024-07-24T08:57:54.000Z","size":1184,"stargazers_count":424,"open_issues_count":44,"forks_count":223,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-05-11T11:19:13.398Z","etag":null,"topics":["acl","laravel","nova","permission","php","secure","spatie"],"latest_commit_sha":null,"homepage":"https://novapackages.com/packages/vyuldashev/nova-permission","language":"PHP","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/vyuldashev.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}},"created_at":"2018-08-23T15:52:38.000Z","updated_at":"2025-05-03T14:50:32.000Z","dependencies_parsed_at":"2024-12-04T15:02:14.894Z","dependency_job_id":"864a331f-b1b8-47c8-aeec-2f9569c7ddd9","html_url":"https://github.com/vyuldashev/nova-permission","commit_stats":{"total_commits":116,"total_committers":38,"mean_commits":"3.0526315789473686","dds":0.6206896551724138,"last_synced_commit":"2485abfef6d950e8b8b6f0a566da93383e83c6f1"},"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vyuldashev%2Fnova-permission","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vyuldashev%2Fnova-permission/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vyuldashev%2Fnova-permission/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vyuldashev%2Fnova-permission/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vyuldashev","download_url":"https://codeload.github.com/vyuldashev/nova-permission/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254249200,"owners_count":22039029,"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","laravel","nova","permission","php","secure","spatie"],"created_at":"2024-08-04T09:02:47.802Z","updated_at":"2025-05-15T00:08:08.840Z","avatar_url":"https://github.com/vyuldashev.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# A Laravel Nova tool for Spatie's laravel-permission library\n\n[![Latest Version on Packagist](https://img.shields.io/packagist/v/vyuldashev/nova-permission.svg?style=flat-square)](https://packagist.org/packages/vyuldashev/nova-permission)\n[![Total Downloads](https://img.shields.io/packagist/dt/vyuldashev/nova-permission.svg?style=flat-square)](https://packagist.org/packages/vyuldashev/nova-permission)\n\n![screenshot 1](https://raw.githubusercontent.com/vyuldashev/nova-permission/master/docs/user-resource.png)\n\n## Installation\n\nYou can install the package in to a Laravel app that uses [Nova](https://nova.laravel.com) via composer:\n\n```bash\ncomposer require vyuldashev/nova-permission\n```\n\nGo through the [Installation](https://github.com/spatie/laravel-permission#installation) section in order to setup [laravel-permission](https://packagist.org/packages/spatie/laravel-permission).\n\nNext up, you must register the tool with Nova. This is typically done in the `tools` method of the `NovaServiceProvider`.\n\n```php\n// in app/Providers/NovaServiceProvider.php\n\n// ...\n\npublic function tools()\n{\n    return [\n        // ...\n        \\Vyuldashev\\NovaPermission\\NovaPermissionTool::make(),\n    ];\n}\n```\n\nNext, add middleware to `config/nova.php`\n\n```php\n// in config/nova.php\n'middleware' =\u003e [\n    // ...\n    \\Vyuldashev\\NovaPermission\\ForgetCachedPermissions::class,\n],\n```\n\nFinally, add `MorphToMany` fields to you `app/Nova/User` resource:\n\n```php\n// ...\nuse Laravel\\Nova\\Fields\\MorphToMany;\n\npublic function fields(Request $request)\n{\n    return [\n        // ...\n        MorphToMany::make('Roles', 'roles', \\Vyuldashev\\NovaPermission\\Role::class),\n        MorphToMany::make('Permissions', 'permissions', \\Vyuldashev\\NovaPermission\\Permission::class),\n    ];\n}\n```\n\nOr if you want to attach multiple permissions at once, use `RoleBooleanGroup` and `PermissionBooleanGroup` fields (requires at least Nova 2.6.0):\n\n```php\n// ...\nuse Vyuldashev\\NovaPermission\\PermissionBooleanGroup;\nuse Vyuldashev\\NovaPermission\\RoleBooleanGroup;\n\npublic function fields(Request $request)\n{\n    return [\n        // ...\n        RoleBooleanGroup::make('Roles'),\n        PermissionBooleanGroup::make('Permissions'),\n    ];\n}\n```\n\nIf your `User` could have a single role at any given time, you can use `RoleSelect` field. This field will render a standard select where you can pick a single role from.\n\n```php\n// ...\nuse Vyuldashev\\NovaPermission\\PermissionBooleanGroup;\nuse Vyuldashev\\NovaPermission\\RoleSelect;\n\npublic function fields(Request $request)\n{\n    return [\n        // ...\n        RoleSelect::make('Role', 'roles'),\n    ];\n}\n```\n\n## Customization\n\nIf you want to use custom resource classes you can define them when you register a tool:\n\n```php\n// in app/Providers/NovaServiceProvider.php\n\n// ...\n\npublic function tools()\n{\n    return [\n        // ...\n        \\Vyuldashev\\NovaPermission\\NovaPermissionTool::make()\n            -\u003eroleResource(CustomRole::class)\n            -\u003epermissionResource(CustomPermission::class),\n    ];\n}\n\n```\n\nIf you want to show your roles and policies with a custom label, you can set `$labelAttribute` when instantiating your fields:\n\n```php\n// ...\nuse Vyuldashev\\NovaPermission\\PermissionBooleanGroup;\nuse Vyuldashev\\NovaPermission\\RoleSelect;\n\npublic function fields(Request $request)\n{\n    return [\n        // ...\n        RoleBooleanGroup::make('Roles', 'roles', null, 'description'),\n        PermissionBooleanGroup::make('Permissions', 'permissions', null, 'description'),\n        RoleSelect::make('Role', 'roles', null, 'description'),\n    ];\n}\n```\n\n\n## Define Policies \n\n```php\n// in app/Providers/NovaServiceProvider.php\n\n// ...\n\npublic function tools()\n{\n    return [\n        // ...\n        \\Vyuldashev\\NovaPermission\\NovaPermissionTool::make()\n            -\u003erolePolicy(RolePolicy::class)\n            -\u003epermissionPolicy(PermissionPolicy::class),\n    ];\n}\n\n```\n\n## Usage\n\nA new menu item called \"Permissions \u0026 Roles\" will appear in your Nova app after installing this package.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvyuldashev%2Fnova-permission","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvyuldashev%2Fnova-permission","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvyuldashev%2Fnova-permission/lists"}