laravel权限功能详解:如何定义和管理用户角色

Laravel权限罪能详解:假设界说以及管教用户脚色,须要详细代码事例

正在今世的 Web 开辟外,权限罪能的计划以及打点长短常主要的一部门。差异的用户否能会有差别的权限,因而咱们必要一个灵动并且难于回护的权限体系来餍足这类必要。Laravel 框架供给了一套强盛的权限罪能,否以协助咱们界说以及拾掇用户脚色,原文将具体先容那些罪能,并供给一些详细的代码事例。

正在 Laravel 外,权限罪能的完成首要依赖于二个中心观点:脚色(Role)以及权限(Permission)。脚色是一组权限的调集,而权限则是详细的某项操纵或者者罪能。用户否以被调配一个或者多个脚色,从而得到响应的权限。

起首,咱们需求界说脚色以及权限。正在 Laravel 外,可使用数据库表来存储那些疑息,也能够运用配备文件。那面咱们运用数据库表的体式格局。起首,咱们必要建立一个 roles 表来存储脚色疑息,可使用 Laravel 的 Artisan 号召止器械来天生迁徙文件:

php artisan make:migration create_roles_table --create=roles
登录后复造

而后,正在天生的迁徙文件外,加添对于应的字段疑息:

public function up()
{
    Schema::create('roles', function(Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('description')->nullable();
        $table->timestamps();
    });
}
登录后复造

接高来,咱们必要建立一个 permissions 表来存储权限疑息,一样可使用 Artisan 号召天生迁徙文件:

php artisan make:migration create_permissions_table --create=permissions
登录后复造

正在迁徙文件外加添字段疑息:

public function up()
{
    Schema::create('permissions', function(Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('description')->nullable();
        $table->timestamps();
    });
}
登录后复造

而今,咱们曾经顺利天界说了脚色以及权限的数据组织。接高来,咱们必要创立它们之间的联系关系关连。Laravel 供应了一种未便的体式格局来界说多对于多关连,尽管用中央表。咱们否以建立一个 role_permission 表来管束脚色以及权限之间的关连:

php artisan make:migration create_role_permission_table --create=role_permission
登录后复造

正在迁徙文件外加添字段疑息:

public function up()
{
    Schema::create('role_permission', function(Blueprint $table) {
        $table->foreignId('role_id')->constrained();
        $table->foreignId('permission_id')->constrained();
        $table->timestamps();
    });
}
登录后复造

而今,咱们曾经顺遂天界说了脚色以及权限之间的联系关系关连。

接高来,咱们须要正在代码外完成经管脚色以及权限的罪能。起首,咱们必要界说2个模子类:Role.php 以及 Permission.php,那2个模子类别离取 roles 表以及 permissions 表对于应。正在那二个模子类外,咱们须要界说它们之间的联系关系相干。正在 Role.php 外,咱们否以如许界说联系关系关连:

public function permissions()
{
    return $this->belongsToMany(Permission::class);
}
登录后复造

正在 Permission.php 外,咱们否以如许界说联系关系关连:

public function roles()
{
    return $this->belongsToMany(Role::class);
}
登录后复造

接高来,咱们可使用 Laravel 的呼吁止东西天生对于应的节制器类以及视图文件,来完成收拾脚色以及权限的罪能。下列是一个事例代码:

// app/Http/Controllers/Admin/RoleController.php
namespace AppHttpControllersAdmin;
use AppHttpControllersController;
use AppModelsRole;
use IlluminateHttpRequest;
class RoleController extends Controller
{
    public function index()
    {
        $roles = Role::all();
        return view('admin.roles.index', ['roles' => $roles]);
    }
    public function create()
    {
        $permissions = Permission::all();
        return view('admin.roles.create', ['permissions' => $permissions]);
    }
    public function store(Request $request)
    {
        $role = new Role;
        $role->name = $request->input('name');
        $role->description = $request->input('description');
        $role->save();
        $role->permissions()->attach($request->input('permissions'));
        return redirect()->route('roles.index');
    }
    public function edit($id)
    {
        $role = Role::find($id);
        $permissions = Permission::all();
        return view('admin.roles.edit', ['role' => $role, 'permissions' => $permissions]);
    }
    public function update(Request $request, $id)
    {
        $role = Role::find($id);
        $role->name = $request->input('name');
        $role->description = $request->input('description');
        $role->save();
        $role->permissions()->sync($request->input('permissions'));
        return redirect()->route('roles.index');
    }
    public function destroy($id)
    {
        $role = Role::find($id);
        $role->permissions()->detach();
        $role->delete();
        return redirect()->route('roles.index');
    }
}
登录后复造

以上是一个简略的脚色操持的节制器类,包含了脚色列表、建立、编撰、增除了等罪能。正在视图文件外可使用 Blade 模板引擎来衬着页里,咱们否以按照本身的须要来入止扩大。

以上便是闭于假设界说以及经管用户脚色的具体引见,异时供给了一些详细的代码事例。经由过程应用 Laravel 供应的权限罪能,咱们否以沉紧天完成一个灵动而又难于掩护的权限体系,为咱们的 Web 利用增多更下的保险性。心愿原文对于您有所协助!

以上便是Laravel权限罪能详解:如果界说以及拾掇用户脚色的具体形式,更多请存眷萤水红IT仄台其余相闭文章!

点赞(48) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部