https://github.com/itstructure/laravel-rbac
Laravel package for RBAC manage
https://github.com/itstructure/laravel-rbac
laravel laravel-rbac permission rbac role
Last synced: 6 months ago
JSON representation
Laravel package for RBAC manage
- Host: GitHub
- URL: https://github.com/itstructure/laravel-rbac
- Owner: itstructure
- License: mit
- Created: 2018-07-22T03:40:51.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2025-02-28T11:12:43.000Z (7 months ago)
- Last Synced: 2025-03-29T20:03:02.024Z (6 months ago)
- Topics: laravel, laravel-rbac, permission, rbac, role
- Language: PHP
- Homepage: https://pack-develop.info/en/product/rbac-laravel-package
- Size: 291 KB
- Stars: 53
- Watchers: 0
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
- License: LICENSE
Awesome Lists containing this project
README
# Laravel RBAC package
[](https://packagist.org/packages/itstructure/laravel-rbac)
[](https://packagist.org/packages/itstructure/laravel-rbac)
[](https://packagist.org/packages/itstructure/laravel-rbac)
[](https://packagist.org/packages/itstructure/laravel-rbac)
[](https://scrutinizer-ci.com/g/itstructure/laravel-rbac/build-status/master)
[](https://scrutinizer-ci.com/g/itstructure/laravel-rbac/?branch=master)## 1 Introduction
**LaRbac** - Package for the Laravel framework which provides management with the next data:
- Roles
- Permissions
- Assign roles for users
## 2 Dependencies
- laravel 8+ | 9+ | 10+ | 11+ | 12+
- Bootstrap 4 for styling
- JQuery
- php >= 7.3.0
- composer## 3 Installation
**Note!**
Version **3.x** is for laravel **8+**, **9+**, **10+**, **11+**, **12+**.
Version **2.x** is for laravel **6** or **7**. You can use branch `laravel67-rbac` with **2.x** versions.
### 3.1 General installation from remote repository
Run the composer command:
`composer require itstructure/laravel-rbac "^3.0.18"`
### 3.2 Next internal installation steps
**Notes:**
- Make sure that a table for the users is already existing in your project.
- Make sure that a model for the users table is already existing in your project.
**Recommendation:**
If you don't have any layout yet, it is useful to install for example [AdminLTE](https://github.com/jeroennoten/Laravel-AdminLTE)
or you can make your special any layout template.
Cause in this package there is no a layout specially. But in config it is necessary to set it (see the next point 2 about a configure).Let's go:
1. Publish files.
**Note:** `rbac.php` config file and seeders `LaRbacDatabaseSeeder`, `PermissionSeeder`, `RoleSeeder` must be published surely!
- To publish config run command:
`php artisan rbac:publish --only=config`
It stores config file to `config` folder.
- To publish seeders run command:
`php artisan rbac:publish --only=seeders`
It stores seeder files to `database/seeders` folder.
- To publish migrations run command:
`php artisan rbac:publish --only=migrations`
It stores migration files to `database/migrations` folder.
- To publish views run command:
`php artisan rbac:publish --only=views`
It stores view files to `resources/views/vendor/rbac` folder.
- To publish translations run command:
`php artisan rbac:publish --only=lang`
It stores translation files to `resources/lang/vendor/rbac` folder.
- To publish all parts run command without `only` argument:
`php artisan rbac:publish`
Else you can use `--force` argument to rewrite already published files.
2. Configure published `config/rbac.php` file:- set `layout`. Example: `'layout' => 'adminlte::page'`
- change `userModelClass` if it is needed to change
- set `adminUserId` which you wanted to be with the role of administrator. **At least at the beginning stage**.
It is necessary for the next time system to let you go into the Rbac control panel, after you assigned an administrator role for you (Later see point **4**).
- Most likely you have to change `memberNameAttributeKey`.
It is to display the user name in control panel by `getMemberNameAttribute()` method of `Administrable` trait. It can be **string** or a **callback**:
```php
'memberNameAttributeKey' => function ($row) {
return $row->first_name . ' ' . $row->last_name;
}
```
3. Tuning your `User` model (as shown in **4.1** point):- Implement `User` model from `RbacUserInterface`.
- Add **roles** attribute to `$fillable`.
- Apply `Administrable` trait.4. Run command to run migrations and seeders:
`php artisan rbac:database`
Or optional:
To run just migrations `php artisan rbac:database --only=migrate`
To run just seeds `php artisan rbac:database --only=seed`
- Alternative variant for seeders.
You can set published rbac `LaRbacDatabaseSeeder` seeder class in to a special `DatabaseSeeder`:
```php
use Illuminate\Database\Seeder;
```
```php
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(LaRbacDatabaseSeeder::class);
}
}
```
and run command: `php artisan db:seed`.
5. Run command to set Admin role for user with identifier `adminUserId`, defined in **2** point:`php artisan rbac:admin`
## 4 Usage
**Notes**:
- Make sure you use a **Bootstrap 4** for styling and **JQuery** in your application.
- Make sure that a laravel initial factory authorization is already working in your application.
### 4.1 Model part
According with the `Itstructure\LaRbac\Interfaces\RbacUserInterface` use functions from `Itstructure\LaRbac\Traits\Administrable` trait as in example:
```php
namespace App;use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Itstructure\LaRbac\Interfaces\RbacUserInterface;
use Itstructure\LaRbac\Traits\Administrable;
``````php
class User extends Authenticatable implements RbacUserInterface
{
use Notifiable, Administrable;protected $fillable = [
'name', 'email', 'password', 'roles'
];protected $hidden = [
'password', 'remember_token',
];
}
```### 4.2 Routes part
There are already integrated base RBAC routes to manage **users**, **roles** and **permissions**. See in `routes.php` package file.
They are guarded by the next:
- middleware `auth` (editable by config).
- permission `can:administrate` (editable by config).This routes allow you to go to the next routes:
- **Users section**
For get request method
- `http://example-domain.com/rbac/users`
- `http://example-domain.com/rbac/users/show/{id}`
- `http://example-domain.com/rbac/users/edit/{id}`For post request method
- `http://example-domain.com/rbac/users/update/{id}`
- `http://example-domain.com/rbac/users/delete`
- **Roles section**For get request method
- `http://example-domain.com/rbac/roles`
- `http://example-domain.com/rbac/roles/show/{id}`
- `http://example-domain.com/rbac/roles/create`
- `http://example-domain.com/rbac/roles/edit/{role}`For post request method
- `http://example-domain.com/rbac/roles/store`
- `http://example-domain.com/rbac/roles/update/{role}`
- `http://example-domain.com/rbac/roles/delete`
- **Permissions section**For get request method
- `http://example-domain.com/rbac/permissions`
- `http://example-domain.com/rbac/permissions/show/{id}`
- `http://example-domain.com/rbac/permissions/create`
- `http://example-domain.com/rbac/permissions/edit/{permission}`For post request method
- `http://example-domain.com/rbac/permissions/store`
- `http://example-domain.com/rbac/permissions/update/{permission}`
- `http://example-domain.com/rbac/permissions/delete`### 4.3 Gates part
There are already integrated base RBAC gates to access control in your application to some of the resources. See provider file `RbacAuthServiceProvider.php`.
It provides the next gate definitions:
- `administrate`
- `assign-role`
- `delete-member`
- `view-record`
- `create-record`
- `update-record`
- `delete-record`
- `publish-record`Read more in [Laravel gates](https://laravel.com/docs/9.x/authorization#gates)
## 5 View examples
**Users**

**Roles**

**Permissions**

## License
Copyright © 2018-2025 Andrey Girnik girnikandrey@gmail.com.
Licensed under the [MIT license](http://opensource.org/licenses/MIT). See LICENSE.txt for details.