searsaw/drawbridge

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

Laravel 4 的角色和权限。

dev-master 2014-08-21 00:26 UTC

This package is not auto-updated.

Last update: 2023-02-13 18:28:08 UTC


README

此仓库不再维护。由于 Laravel 现在要求 PHP 5.4,使用 Laravel 允许您使用 traits。已弃用的 Entrust 包已经支持此功能,并且拥有更大的社区。我建议使用它。

Laravel 4 的角色和权限。

##安装

searsaw/drawbridge 添加到您的 composer.json 文件的要求中。

{
  "require": {
    "searsaw/drawbridge": "dev-master"
  }
}

使用 composer update 更新您的应用程序包或使用 composer install 安装它们。然后在 app/config/app.php 文件的 providers 数组中添加服务提供者。

'providers' => array(
    'Illuminate\Foundation\Providers\ArtisanServiceProvider',
    'Illuminate\Auth\AuthServiceProvider',
    ...
    'Illuminate\Workbench\WorkbenchServiceProvider',
    'Searsaw\Drawbridge\DrawbridgeServiceProvider'
),

##入门

首先,我们需要将迁移导出到 migrations 目录中,以便 Drawbridge 的表可以放入数据库中。运行 php artisan drawbridge:migrations 命令以导出它们。然后使用 php artisan migrate 迁移数据库。

为了让角色和权限正常工作,需要存在一个 Role 模型、一个 Permission 模型和用户模型。幸运的是,Drawbridge 提供了三个模型,您可以轻松扩展它们以向您的模型添加功能。在您的 app/models 目录中,创建以下两个模型。

use Searsaw\Drawbridge\Models\BridgeRole;

class Role extends BridgeRole {}
use Searsaw\Drawbridge\Models\BridgePermission;

class Permission extends BridgePermission {}

此包还包含一个 BridgeUser 模型,用于向您的 User 模型添加添加角色的功能。以下代码将 BridgeUser 模型功能添加到 Laravel 中的默认 User 模型。

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use Searsaw\Drawbridge\Models\BridgeUser;

class User extends BridgeUser implements UserInterface, RemindableInterface {

...

这三个模型都扩展了 Magniloquent,这是 Laravel 模型验证包。Magniloquent 扩展了 Eloquent,为您提供了 Eloquent 的所有功能,并增加了模型验证的优势。有关 Magniloquent 的更多信息,请访问其 [GitHub 页面](https://github.com/philipbrown/magniloquent)。

添加角色和权限

角色是一组权限。用户可以拥有不同的角色,根据他们拥有的角色获得扩展的能力。

要向用户添加角色,请使用用户对象的 addRole 方法。此方法可以接受角色 ID、角色名称或角色对象。如果角色对象尚未保存到数据库中,它将在附加到用户之前被保存。此方法还可以接受前面三种的组合的数组。

要向角色添加权限,请使用角色对象的 addPermission 方法。此方法与上面提到的 addRole 方法工作方式相同。这使得添加权限变得尽可能简单。

$user = User::find(1);

$admin = new Role;
$admin->name = 'admin';
$admin->display_name = 'Admin';
$admin->save();

$author = new Role;
$author->name = 'author';
$author->display_name = 'Author';
$author->save();

$edit = new Permission;
$edit->name = 'can_edit';
$edit->display_name = 'Can Edit';
$edit->save();

$view = new Permission;
$view->name = 'can_view';
$view->display_name = 'Can View';
$view->save();

$user->addRole([$admin, $author]);

$admin->addPermission([$edit->id, 'can_view']);

##检查角色或权限

要检查用户是否具有特定角色,请使用用户对象的 hasRole 方法。它可以接受 ID、名称或 Role 对象本身。如果用户具有该角色则返回 true,如果用户不具有该角色则返回 false

要检查角色是否具有特定权限,请使用角色对象的 hasPermission 方法。它可以接受 ID、名称或 Permission 对象本身。如果角色具有该权限则返回 true,如果角色不具有该权限则返回 false

您还可以通过在用户对象上使用 hasPermission 方法来检查用户是否具有特定的权限。它可以接受一个ID、一个名称,或者是一个权限对象本身。如果用户具有该权限,则返回 true,如果没有则返回 false

$user = User::find(1);
$admin = Role::find(2);
$edit = Permission::find(1);

$user->hasRole('admin');
$user->hasRole($admin);
$user->hasRole(2);

$admin->hasPermission('can_edit');
$admin->hasPermission($edit);
$admin->hasPermission(1);

$user->hasPermission('can_edit');
$user->hasPermission($edit);
$user->hasPermission(1);

##许可证

MIT许可证 (MIT)

版权所有 (c) 2013 Alex Sears

特此免费授予任何获得本软件及其相关文档副本(以下简称“软件”)的人士,无限制地使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许获得软件的人士进行上述操作,但需遵守以下条件:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的明示或暗示担保,包括但不限于适销性、针对特定目的的适用性和非侵权性担保。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论该责任源于合同、侵权或其他原因,以及与软件或软件的使用或其他交易相关的任何事件。