操作步骤:https://github.com/Zizaco/entrust/tree/1.0
这篇博客说的蛮详细的:http://blog.boolw.com/?p=241
简化后的步骤
1.在根项目composer.json下require键下添加以下代码(注意:在”laravel/framework”: “4.2.*”,后追加逗号):
"zizaco/entrust": "1.2.*@dev"
2.执行下面命令
$ composer update
3.在你的config/app.php
添加'ZizacoEntrustEntrustServiceProvider'
的结束$providers
'providers' => array( 'IlluminateFoundationProvidersArtisanServiceProvider', 'IlluminateAuthAuthServiceProvider', ... 'ZizacoEntrustEntrustServiceProvider', ),
4.在config/app.php后面
添加'Entrust' => 'ZizacoEntrustEntrustFacade'
到$aliases
'aliases' => array( 'App' => 'IlluminateSupportFacadesApp', 'Artisan' => 'IlluminateSupportFacadesArtisan', ... 'Entrust' => 'ZizacoEntrustEntrustFacade', ),
5.设置的属性值config/auth.php
。这些值将使用entrust来引用正确的用户表和模型.
6.现在生成entrust迁移,它将生成<timestamp>_entrust_setup_tables.php
迁移。目录在你当前执行的项目下的 managedatabasemigrations 里
$ php artisan entrust:migration
7.运行下面的语句,生产相关联的四张表
$ php artisan migrate
注意:
SQLSTATE[HY000]: General error: 1005 Can't create table 'laravelbootstrapstarter.#sql-42c_f8' (errno: 150) (SQL: alter table `assigned_roles` add constraint assigned_roles_user_id_foreign foreign key (`
user_id`) references `users` (`id`)) (Bindings: array (
))
也许在这步创建assigned_roles表,会报外键管理错误:你可以检查下,用户表的主键是否设置 UNSIGNED属性,或是id
列在你的用户表没有user_id和
assigned_roles字段
。并且都是INT(10)
。
生产的四张数据表解释:
roles - 用户组信息表;
assigned_roles - 用户和用户组之间的对应关系;
permissions - 权限信息表;
permission_role - 权限和用户组之间的对应关系.
8.创建模型
a.创建一个角色模型的例子app/models/Role.php
:
<?php use ZizacoEntrustEntrustRole; class Role extends EntrustRole { }
b.创建一个权限模型的例子app/models/Permission.php
:
<?php use ZizacoEntrustEntrustPermission; class Permission extends EntrustPermission { }
c.接下来,使用HasRole
在你现有的特征User
模型。例如:
<?php use ZizacoEntrustHasRole; class User extends Eloquent /* or ConfideUser 'wink' */{ use HasRole; // Add this trait to your user model ...
这将会奏效,使关系Role
和下面的方法roles
, hasRole( $name )
, can( $permission )
,ability($roles, $permissions, $options)
在你的User
模型。
9.别忘了dump composer autoload
$ composer dump-autoload
二.使用
1.让我们首先创建以下Role
和Permission
:
$owner = new Role; $owner->name = 'Owner'; $owner->save(); $admin = new Role; $admin->name = 'Admin'; $admin->save();
2.接下来,创建了两个角色让我们然后分配给用户。HasRole
使用非常容易:
$user = User::where('username','=','Zizaco')->first(); /* role attach alias */ $user->attachRole( $admin ); // Parameter can be an Role object, array or id. /* OR the eloquent's original: */ $user->roles()->attach( $admin->id ); // id only
错误解决办法:
问题1:Missing argument 2 for IlluminateViewEnginesCompilerEngine::handleViewException(), called in E:wampwwwwholesaleappsmanagecompiled.php on line 9519 and defined
当操作多对的情况下,可以看看vendorzizacoentrustsrcEntrustHasRole.php 方面里面的第三个参数是的对了:
public function roles()
{
return $this->belongsToMany(Config::get('entrust::role'), Config::get('entrust::assigned_roles_table'), 'user_id', 'role_id');
}