kduma/permissions

此包已废弃且不再维护。未建议替代包。

为Laravel 5.1提供角色和权限的简单(真的吗?)包

v1.1.0 2015-06-09 19:38 UTC

This package is auto-updated.

Last update: 2022-12-02 01:27:15 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License SensioLabsInsight StyleCI

为Laravel 5.1提供角色和权限的简单(真的吗?)包

设置

将包添加到composer.json中的require部分,并运行composer update

"kduma/permissions": "^1.1"

然后将服务提供者添加到config/app.php中的providers数组

KDuma\Permissions\PermissionsServiceProvider::class,

然后将外观添加到config/app.php中的aliases数组

'Permissions'        => KDuma\Permissions\Facades\Permissions::class,
'PermissionsManager' => KDuma\Permissions\Facades\PermissionsManager::class,

然后将中间件添加到app/Http/Kernel.php中的routeMiddleware数组

'permission' => \KDuma\Permissions\Middleware\Permission::class,
'role' => \KDuma\Permissions\Middleware\Role::class,

在你的User模型(app/User.php)中添加以下行

use \KDuma\Permissions\Permissions;

运行以下命令以复制迁移

php artisan vendor:publish --provider="KDuma\Permissions\PermissionsServiceProvider" --tag="migrations"

SampleMigrations文件夹中有你可以使用或根据需要创建的示例。

  • 2015_01_01_000005_create_and_assign_roles_and_permissions.php迁移文件中有示例角色和权限
  • 2015_01_01_000006_create_administrator_account.php迁移文件中创建了管理员账户

使用方法

保护控制器和路由

你可以使用两个中间件:permissionrole

Route::get('admin/profile', [
    'middleware' => 'role:editor',
    'uses' => 'UserController@showProfile'
]);

或者

class UserController extends Controller
{
    public function __construct()
    {
        $this->middleware('permission:user.edit:user.panel');
    }
}

你可以在一次调用中提供多个角色/权限,通过:分隔。例如:permission:perm1:perm2:perm3。中间件如果用户没有提供的权限/角色之一,将拒绝访问。

在视图中检查权限

你可以使用Permissions外观

Permissions::can('permission');

或者

Permissions::is('role');

创建/删除角色和权限

要管理角色和权限,你可以使用PermissionsManager外观。
管理权限的最简单方法是将它们放在迁移文件中。

PermissionsManager外观有一系列有用的方法

  • 角色
    • PermissionsManager::createRole('ROLE_STRING_ID', 'ROLE_DESCRIPTION');
    • PermissionsManager::deleteRole('ROLE_STRING_ID');
  • 权限
    • PermissionsManager::createPermission('PERMISSION_STRING_ID', 'PERMISSION_DESCRIPTION');
    • PermissionsManager::deletePermission('PERMISSION_STRING_ID');
  • 附加和解除角色和权限
    • PermissionsManager::attach('ROLES_LIST', 'PERMISSIONS_LIST');
    • PermissionsManager::detach('ROLES_LIST', 'PERMISSIONS_LIST');

管理员角色

默认情况下,admin角色被设置为根角色。根角色始终拥有所有权限。你可以在配置文件中更改它。

扩展

模型

你可以自由扩展PermissionRole模型。
如果你扩展,请在配置中设置模型路径(在ConfigServiceProvider中)

config([ 'permissions.models.Role' => '\App\Role' ]);

示例扩展模型

namespace App;

use KDuma\Permissions\Models\Role as BaseRole;

class Role extends BaseRole
{
    public function members()
    {
        return $this->hasMany('\App\Member');
    }
}

来自关联模型的角色和权限

例如,如果您的用户与具有自己角色的Member对象相关联,您可以通过在您的User模型中放置此示例方法来导入它们。

protected function fetchAddionalPermissions($roles_list, $permissions_list)
{
    $this->load('member.role.permissions');
    if(!is_null($this->member) && !is_null($this->member->role)){
        $role = $this->member->role;
        $roles_list[$role->str_id] = $role;
        foreach ($role->permissions as $permission) {
            $permissions_list[$permission->str_id] = $permission;
        }
    }
    return [$roles_list, $permissions_list];
}

Packagist

在Packagist.org上查看此包:kduma/permissions