imp*_*335 13 php rbac laravel laravel-5 laravel-5.1
我正在尝试为我的应用程序提出一个高效灵活的RBAC解决方案.我做了一点研究,并认为我创造了以下内容.
在我的用户模型中,我有:
...
public function role() {
return $this->belongsToMany('App\Models\Role', 'user_roles');
}
public function hasRole($role) {
if($this->role->where('name', $role)->first())
return true;
}
...
Run Code Online (Sandbox Code Playgroud)
以及用法示例:
Route::group(['middleware' => 'auth'], function () {
Route::get('/dashboard', function () {
if (Auth::user()->hasRole('Sales')) {
return view('dashboards/sales');
} else {
return 'Don\'t know where to send you :(';
}
});
});
Run Code Online (Sandbox Code Playgroud)
权限分配给角色,但在上面的示例中未检查权限.然后将角色分配给用户,并且用户可以具有许多角色.
我的工作方式是否可扩展且有效的RBAC解决方案?
我制作了一些RBAC应用程序,这取决于您面临的挑战类型,例如
用户有一个角色,但您希望特定用户有权访问某些区域,例如,现在用户可以像版主Posts一样编辑帖子。在这种情况下,权限方法比角色方法更适合。
通过 slug 定义访问权限,其他字段可以用作对Super Admin 的引用,或者具有讽刺意味的是,用于Editor Role,从现在开始,编辑器角色加上对新“区域”的权限。
public function up()
{
Schema::create('permissions', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->string('name');
$table->string('slug')->unique();
$table->string('description')->nullable();
$table->string('model')->nullable();
});
}
Run Code Online (Sandbox Code Playgroud)
作为内容数据的示例,
$createUsersPermission = Permission::create([
'name' => 'Create permissions',
'slug' => 'create.permissions',
...
]);
Run Code Online (Sandbox Code Playgroud)
以及使用示例:
if ($user->can('create.permissions') { // you can pass an id or slug
//
}
Run Code Online (Sandbox Code Playgroud)
个人偏好,从未像其他人建议的那样使用Zizaco Entrust,但它的工作原理是相同的。你也有水平方法。
| 归档时间: |
|
| 查看次数: |
11638 次 |
| 最近记录: |