権限に応じて、メニューバーを表示さまざまな機能で、唯一のメニューは限られていた、とルートも限られていた場合は、メニューの一例によると、完璧な自己開発しました。RBAC設計laravelについて学ぶために、慎重に、次の
図1に示すように、テーブルの構築(表ユーザ、役割テーブル、テーブルの権限、ユーザロールテーブル、役割権限テーブル)
1 CREATE TABLE IF NOTはmr_role EXISTS 2 ( 3のID INT(11)PRIMARY KEY AUTO_INCREMENTコメント'自增ID'、 4名のVARCHAR(30)NOT NULL COMMENT '角色名' 5)ENGINE = InnoDBのDEFAULT CHARSET = UTF8コメント=」角色表」; 6 7 8 TABLE CREATE IF NOTがmr_privilege EXISTS 9 ( 10のID INT(11)PRIMARY KEY AUTO_INCREMENTコメント'自增ID'、 11名のVARCHAR(30)NOT NULL COMMENT '权限名'、 12ルートVARCHAR(50)NOTをNULL COMMENT 'のすべてのルートの権限'、 13は説明VARCHAR(100)NOT NULL COMMENT '権利記述' 14)ENGINE = InnoDBのDEFAULT CHARSET = UTF8 COMMENT = 'パーミッション・テーブル' ; 15 16 。17 TABLE CREATE IF NOT mr_user_role EXISTS 18です ( 19 ID INT(11)PRIMARY KEY AUTO_INCREMENT COMMENT '自己増力ID'、 20である USER_ID INT(11)NOT NULL COMMENT 'ユーザID'、 21は ROLE_ID INT(11)NOT NULL COMMENT '役割ID' 22れる)ENGINE = InnoDBのDEFAULT CHARSET = UTF8のCOMMENT = 'ユーザーロールテーブル' ; 23は、 24 25のCREATE TABLE IF NOT mr_role_privilege EXISTS 26である ( 27(11)PRIMARY ID INTをKEY AUTO_INCREMENT COMMENT '自己増力ID'、 28 ROLE_ID INT(11)NOT NULL COMMENT '役割ID'、 29 privilege_id INT(11)NOT NULL COMMENT '許可ID' 30)ENGINE = InnoDBのDEFAULT CHARSET = UTF8 COMMENT = '役割許可テーブル';
多くのユーザーモデルとロールモデルを達成するために2、
1 クラスのユーザに延びモデル 2 { 3 保護 $主キー =「ID」。 4 保護された $表 = 'ユーザ。 5つの 公共 $タイムスタンプ = 偽; 6 公共 守ら$ = ; [] 7つの パブリック 関数の役割() 8 { 9 リターンは これを$ - > belongsToMany( 'アプリケーション\モデル\役割'、 'USER_ROLE'、 'user_idの'、 'ROLE_ID') - > withPivot( 'user_idを'、 'ROLE_ID' ); 12 13 14 15 クラスの役割延びモデル 16 { 17 保護 $テーブル = '役割' ; 18 保護 $ PRIMARYKEY = 'ID' 。 19の 公共 $タイムスタンプ = 偽; 20 公共 守ら$ = ; [] 21の パブリック 関数の特権() 22 { 23 リターンは これを$ - > belongsToMany( 'アプリケーション\モデル\特権'、 'role_privilege'、 'ROLE_ID'、 'privilege_id') - > withPivot([ 'ROLE_ID'、 ']); 24 }
}
3、メニューはアプリ\プロバイダ\ AppServiceProvider.php中に書き込み、公共エリアとみなされます
1つの パブリック 関数ブート() 2 { 3 \ビュー::作曲( 'layout.slide'、関数($ビュー){ 4 $ roles_id =ユーザー::検索(セッション( 'ユーザー')[ 'ID']) - > roles->マップ(関数($役割){ 5 リターン $ロール - > ID; 6 }); // 使用マップ、最终得到的结果$ roles_id = [1、2、...] 7つの $権限 = [] ; 8 foreachの($ roles_id として $役割){ 9つの $権限 =array_merge($権限、役割::検索($役割) - > privileges->地図(関数($特権){ 10 リターン [ $特権 - >名前、$特権 - > ルート]; 11 }) - > のtoArray() ); 12 } // 得られた結果は、$ prpvileges = [ 'インデックス / ..'、 ' リスト']、[ ''、 '']] 13である $ビュー - >( '特権'と$権限)。 14 }); 15 }
4、メニューを達成するために(あなたはdiv要素を歩くことができる、私は判断して、その後、さまざまなスタイルがありますので、ここにいますよ)
1 @ foreachの($特権 として $特権) 2 @ もし($特典 [1] == 'キー/インデックス' && $特典 [0] == '键名列表' ) 3 の<div クラス = "slide__left__key"スタイル= "マージントップ:10pxの;"> <a href="{{ url('key/index') }}" rel="external nofollow"> <スパンクラス = "glyphicon glyphicon番目の"> </ span>の键名列表する</a> </ div>の 4 @ endifの 5 @ もし($特典 [1] == 'キーを作成/' &&特権$ [0] == 'キー名を追加' ) 6 <divのクラス = "slide__left__key"> <a href="{{ url('key/create') }}" rel="external nofollow"> <スパンクラス = "glyphicon glyphiconプラス"> </ span>の添加键名</a>の</ div>の 7 @ endifの 8 @ もし($特典 [1] == 'プロジェクト/インデックス' && $特典 [0] == '项目列表' ) 9 <divのクラス = "slide__left__key"スタイル= "マージントップ:20ピクセル;"> <a href="{{ url('project/index') }}" rel="external nofollow"> <スパンクラス =」 glyphicon glyphicon番目のリスト「> </ span>のアイテムのリスト</a>の</ div>の10 @ endifの 11 @ IF($特権は [1] == 'プロジェクトが作成/' && $特典 [0] == '添加项目' ) 12 <divのクラス = "slide__left__key"> <A HREF = "{{URL( 'プロジェクト作成/') }}」のrel = "nofollowを外部"> <スパンクラス = "glyphicon glyphicon編集"> </ span>の添加项目</a>の</ div>の 13 @ endifの 14 @ もし($特典 [1] == 'ユーザー/インデックス」&& $特典 [0] == '用户列表' ) 15 <divのクラス = "slide__left__key"スタイル= "マージントップ:20ピクセル;「> <a href="{{ url('user/index') }}" rel="external nofollow"> <スパンクラス= "glyphicon glyphicon番目の大型"> </ span>の用户列表</a>の</ div>の 16 @ endifの 17 @ もし($特典 [1] == 'ユーザーが作成/' && $特典 [0] = = '添加用户' ) 18 <divのクラス = "slide__left__key"> <a href="{{ url('user/create') }}" rel="external nofollow"> <スパンクラス = "glyphicon glyphicon-plus-記号"> </ span>の添加用户</a>の</ div>の 19 @ endifの 20 @ endforeach