laravel(4.2) +Zizaco
操作步驟:https://github.com/Zizaco/entrust/tree/1.0
這篇博客說的蠻詳細的:http://blog.boolw.com/?p=241
簡化後的步驟
1.在根項目composer.json下require鍵下添加以下代碼(註意:在”laravel/framework”: “4.2.*”,後追加逗號):
"zizaco/entrust": "[email protected]"
2.執行下面命令
$ composer update
3.在你的config/app.php
添加‘Zizaco\Entrust\EntrustServiceProvider‘
的結束$providers
‘providers‘ => array( ‘Illuminate\Foundation\Providers\ArtisanServiceProvider‘, ‘Illuminate\Auth\AuthServiceProvider‘, ... ‘Zizaco\Entrust\EntrustServiceProvider‘, ),
4.在config/app.php後面
添加‘Entrust‘ => ‘Zizaco\Entrust\EntrustFacade‘
到$aliases
‘aliases‘ => array( ‘App‘ => ‘Illuminate\Support\Facades\App‘, ‘Artisan‘ => ‘Illuminate\Support\Facades\Artisan‘, ... ‘Entrust‘ => ‘Zizaco\Entrust\EntrustFacade‘, ),
5.設置的屬性值config/auth.php
。這些值將使用entrust來引用正確的用戶表和模型.
6.現在生成entrust遷移,它將生成<timestamp>_entrust_setup_tables.php
遷移。目錄在你當前執行的項目下的 manage\database\migrations 裏
$ 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 Zizaco\Entrust\EntrustRole; class Role extends EntrustRole { }
b.創建一個權限模型的例子app/models/Permission.php
:
<?php use Zizaco\Entrust\EntrustPermission; class Permission extends EntrustPermission { }
c.接下來,使用HasRole
在你現有的特征User
模型。例如:
<?php use Zizaco\Entrust\HasRole; 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 Illuminate\View\Engines\CompilerEngine::handleViewException(), called in E:\wamp\www\wholesale\apps\manage\compiled.php on line 9519 and defined
當操作多對的情況下,可以看看\vendor\zizaco\entrust\src\Entrust\HasRole.php 方面裏面的第三個參數是的對了:
public function roles()
{
return $this->belongsToMany(Config::get(‘entrust::role‘), Config::get(‘entrust::assigned_roles_table‘), ‘user_id‘, ‘role_id‘);
}
laravel(4.2) +Zizaco