despark/laravel-permission-roles

laravel 框架的权限角色包

v2.0.0 2015-10-16 14:33 UTC

This package is not auto-updated.

Last update: 2024-09-18 10:02:17 UTC


README

安装

打开您的项目中的 composer.json 文件,并将以下内容添加到 require 数组中

"despark/laravel-permission-roles" : "1.0.*"

现在运行 composer update 安装新的依赖。

安装完成后,您需要在 app/config/app.php 文件的 providers 数组中注册服务提供者

'providers' => array(
  ...
  'Despark\LaravelPermissionRoles\LaravelPermissionRolesServiceProvider',
);

迁移所需的表:执行 php artisan migrate --package="despark/laravel-permission-roles" 命令将创建:roles, role_user, permissions, permission_role - 表

如何使用它

  • 用户模型示例
use Despark\LaravelPermissionRoles\PermissionTrait;

class User extends Eloquent
{
    use PermissionTrait;
}
  • 将角色附加到用户
$input = Input::all();
$user = new User();
$user = $user->create($input);
$user->attachRole(array_get($input, 'role'));
  • 更新用户角色
$user = User::findOrFail($id)
$user->changeRole(Input::get('role'));
  • 使用角色模型
use Despark\LaravelPermissionRoles\Role;

class RoleController extends BaseController
{
	Role::findOrFail($id);
}

角色表 alt tag

  • 将权限添加到角色
$input = Input::all();
$role = Role::findOrFail($id);
$role->update($input);
if ($role->permissions->count()) {
    $role->permissions()->detach($role->permissions->lists('id'));
    $role->permissions()->attach(array_get($input, 'permissions'));
}
  • 检查当前用户是否有权限
Auth::user()->canLoginToAdmin()  // permission slug 'login_to_admin'

Auth::user()->canAddUsers()  // permission slug 'edit_user'

Auth::user()->canEditUsers()  // permission slug 'edit_page'

权限表 alt tag

基于权限的路由

filters.php

Route::filter('admin.permission', function () {

    $route = explode('/', \Route::getCurrentRoute()->getPath());

    if (!Auth::user()->can('edit_'.str_replace('-', '_', array_get($route, 1)))) {
        throw new \Exception("Sorry, you don't have permission to access this page.");
    }
});

routes.php

Route::group(
    ['before' => 'admin.permission'], function () {
        Route::resource('user', 'UserController');
    }
);

Route::group(
    ['before' => 'admin.permission'], function () {
        Route::resource('page', 'PageController');

    }
);