smallneat / trust
Laravel4 的角色和权限
Requires
- php: >=5.4.0
README
通过 traits 实现Laravel 4的用户角色和权限
基于 https://github.com/Zizaco/entrust 的简化思想
所需设置
在 composer.json
文件的 require
键中添加以下内容
"smallneat/trust": "1.*"
运行 Composer 更新命令
$ composer update
在您的 config/app.php
文件中,将 'Smallneat\Trust\TrustServiceProvider'
添加到 $providers
数组的末尾
'providers' => array( 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 'Illuminate\Auth\AuthServiceProvider', ... 'Smallneat\Trust\TrustServiceProvider', ),
配置
Trust 创建了多个表,并对您的模型名称做出了一些假设。您可以使用 Laravel 的正常配置来配置所有这些设置。首先,您需要将此包中的配置发布到您的应用配置中(如果默认名称与您应用程序中现有的表名称冲突,您只需要处理这种情况)
$ php artisan config:publish smallneat/trust
默认设置假设您的模型名称为 User
、Role
和 Permission
,并且用于跟踪这些信息的表名称分别为 users
、roles
和 permissions
。Trust 还使用了 2 个枢纽表来提供用户、角色和权限之间的多对多关联,这些表分别称为 user_role
和 role_permission
。
完成配置(或保留默认设置)后,就到了下一步。
创建数据库迁移
现在我们需要使用以下 artisan 命令创建数据库迁移
$ php artisan trust:migration
它将在您的 app/database/migrations
文件夹中生成 <timestamp>_setup_roles_permissions_tables.php
迁移文件。您现在可以使用 artisan migrate 命令运行迁移
$ php artisan migrate
迁移完成后,将出现四个新表,如上所述。
注意: 这不会为您创建 users
表。如果您还没有用户表,您需要添加一个迁移来创建一个。我们假设此表名为 users
并具有字段 user_id
。
在您的模型中使用 Trust
这里我们假设您已经有一个用户模型(例如,Laravel 在您构建新的 Laravel 应用时为您创建的模型),并且它在数据库中有一个匹配的表(通常称为 users
)。
将 UserRoleTrait
特性添加到用户模型类中(通常在 app/models/User.php
中),如下所示...
<?php ... use Smallneat\Trust\UserRoleTrait; class User extends Eloquent implements UserInterface, RemindableInterface { use UserTrait, RemindableTrait, UserRoleTrait; ... }
接下来,创建一个类似以下的 Role
模型...
<?php use Smallneat\Trust\RoleTrait; class Role extends \Eloquent { use RoleTrait; protected $fillable = []; }
Role 模型有一个 name
属性,它是角色的名称(例如,'Admin'、'Editor'、'Manager'、'User')。您还可以使用 roles()
和 permissions()
查找与角色关联的用户和权限。
接下来,创建一个类似以下的 Permission
模型...
<?php use Smallneat\Trust\PermissionTrait; class Permission extends \Eloquent { use PermissionTrait; protected $fillable = []; }
Permission 模型有一个 name
属性,它是权限的名称(例如,'CreatePost'、'EditPost'、'DeletePost'),以及一个 description
属性,用于存储权限的可读描述(例如,用于在您的管理区域中显示)。roles()
函数将为您提供访问具有此权限的所有角色的权限。
最后,别忘了导出 composer 自动加载
$ composer dump-autoload
用法
每个用户可以关联任意数量的角色。每个角色可以授予任意数量的权限,而权限可以用来控制对您网站各个区域的访问。
角色和权限通常使用您的 DB Seeds 创建,但我们将展示创建一系列权限和角色并将它们分配给用户的示例。最后,我们将展示如何查询用户以了解他们可以做什么以及不能做什么...
首先,我们将为虚构的博客创建一些权限。这些代表您希望以某种方式保护的网站区域。
$createPost = Permission::create([ 'name' => 'CreatePost', 'description' => 'Create new posts' ]); $editPost = Permission::create([ 'name' => 'EditPost', 'description' => 'Edit existing posts' ]); $deletePost = Permission::create([ 'name' => 'DeletePost', 'description' => 'Delete posts' ]); $manageUsers = Permission::create([ 'name' => 'ManageUsers', 'description' => 'Create and Delete user accounts' ]); // plus loads more for all the areas of the site we want to control
接下来,我们将创建一些不同的角色,并将一些权限与它们关联
// Create 2 new roles for an Admin and an Editor $admin = Role::create(['name' => 'Admin']); $editor = Role::create(['name' => 'Editor']); // Attach some permissions to each of the roles // You can either pass in a Role object, and id, or an array of Roles / id's $admin->attachPermissions([$manageUsers, $deletePosts]); $editor->attachPermissions([$createPosts, $editPosts, $deletePosts]); // You can access the permissions that a role has (using Eloquent) like so... $admin->perms() // Remove them with detachPermissions()
最后,我们可以给用户一些这些角色,并查询它们
// Give a user a role (using a Role model or id or an array of roles / id's) $user = Auth::user(); $user->attachRoles($editor); // Query the user $user->hasRole('Editor'); // true $user->hasRole('Admin'); // false $user->can('CreatePost'); // true $user->can('ManageUsers'); // false // Access all the roles the user has $user->roles(); // remove them with detachRoles()
许可证
Trust 是一款免费软件,在 MIT 许可证条款下分发
更多信息
如有问题,请在此报告