142 lines
3.8 KiB
Markdown
142 lines
3.8 KiB
Markdown
# Access Control
|
||
|
||
`laravel-admin` has built-in` RBAC` permissions control module, expand the left sidebar `Auth`, you can see user, permissions and roles management panel, the use of permissions control as follows:
|
||
|
||
## Route permission
|
||
|
||
In the `laravel-admin 1.5`, the permissions and routes are bound together, in the edit permission page which set the current permissions can access the routing, in the `HTTP method` select box to select the method of access to the path, in the `HTTP path` textarea fill in the path to access.
|
||
|
||
For example, to add a permission, the permission can access the path `/admin/users` in GET method, then `HTTP method` select `GET`, `HTTP path` fill in `/users`.
|
||
|
||
If you want to access all paths with the prefix `/admin/users`, then the `HTTP path` fill in `/users*`, if the permissions include multiple access paths, wrap the line for each path.
|
||
|
||
## Page permission
|
||
|
||
If you want to control the user's permissions in the page, you can refer to the following example
|
||
|
||
### example1
|
||
|
||
For example, there is now a scene, here is a article module, we use create articles as an example
|
||
|
||
At first open `http://localhost/admi/auth/permissions`, fill up slug field with text `create-post`, and `Create post` in name field, then assign this permission to some roles.
|
||
|
||
In your controller action:
|
||
```php
|
||
use Encore\Admin\Auth\Permission;
|
||
|
||
class PostController extends Controller
|
||
{
|
||
public function create()
|
||
{
|
||
// check permission, only the roles with permission `create-post` can visit this action
|
||
Permission::check('create-post');
|
||
}
|
||
}
|
||
```
|
||
|
||
### example2
|
||
|
||
If you want to control the page elements of the user's display, then you need to first define permissions, such as `delete-image` and `view-title-column`, respectively, to control the permissions to delete pictures and display a column in grid, then assign these two permissions to roles, add following code to the grid:
|
||
```php
|
||
$grid->actions(function ($actions) {
|
||
|
||
// The roles with this permission will not able to see the delete button in actions column.
|
||
if (!Admin::user()->can('delete-image')) {
|
||
$actions->disableDelete();
|
||
}
|
||
});
|
||
|
||
// Only roles with permission `view-title-column` can view this column in grid
|
||
if (Admin::user()->can('view-title-column')) {
|
||
$grid->column('title');
|
||
}
|
||
```
|
||
|
||
## Other methods
|
||
|
||
Get current user object.
|
||
```php
|
||
Admin::user();
|
||
```
|
||
|
||
Get current user id.
|
||
```php
|
||
Admin::user()->id;
|
||
```
|
||
|
||
Get user's roles.
|
||
```php
|
||
Admin::user()->roles;
|
||
```
|
||
|
||
Get user's permissions.
|
||
```php
|
||
Admin::user()->permissions;
|
||
```
|
||
|
||
User is role.
|
||
```php
|
||
Admin::user()->isRole('developer');
|
||
```
|
||
|
||
User has permission.
|
||
```php
|
||
Admin::user()->can('create-post');
|
||
```
|
||
|
||
User don't has permission.
|
||
```php
|
||
Admin::user()->cannot('delete-post');
|
||
```
|
||
|
||
Is user super administrator.
|
||
```php
|
||
Admin::user()->isAdministrator();
|
||
```
|
||
|
||
Is user in one of roles.
|
||
```php
|
||
Admin::user()->inRoles(['editor', 'developer']);
|
||
```
|
||
|
||
## Permission middleware
|
||
|
||
You can use permission middleware in the routes to control the routing permission
|
||
|
||
```php
|
||
|
||
// Allow roles `administrator` and `editor` access the routes under group.
|
||
Route::group([
|
||
'middleware' => 'admin.permission:allow,administrator,editor',
|
||
], function ($router) {
|
||
|
||
$router->resource('users', UserController::class);
|
||
...
|
||
|
||
});
|
||
|
||
// Deny roles `developer` and `operator` access the routes under group.
|
||
Route::group([
|
||
'middleware' => 'admin.permission:deny,developer,operator',
|
||
], function ($router) {
|
||
|
||
$router->resource('users', UserController::class);
|
||
...
|
||
|
||
});
|
||
|
||
// User has permission `edit-post`、`create-post` and `delete-post` can access routes under group.
|
||
Route::group([
|
||
'middleware' => 'admin.permission:check,edit-post,create-post,delete-post',
|
||
], function ($router) {
|
||
|
||
$router->resource('posts', PostController::class);
|
||
...
|
||
|
||
});
|
||
```
|
||
|
||
The usage of permission middleware is just as same as other middleware.
|
||
|
||
|