新手的管理员和用户

Admin & User for newbie

我想分开2类用户。管理员和用户基本。 Admin 可以创建多个记录,除了只能看到的用户 basic。

这里,用户Admin添加了一个录音

我的第二个用户只能看到录音,但我不知道该怎么做?

我的问题:

1) 我必须在 table "students" 中创建一个字段吗?

我现在有这个:

//学生

public function up()
{
    Schema::create('students', function (Blueprint $table) {
         $table->bigIncrements('id');
         $table->string('name');
         $table->string('firstname');
         $table->timestamps();
    });
}

// 用户

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

我的 2 个模型:

//学生

class Student extends Model
{
    protected  $fillable = ['name', 'firstname'];


}

// 用户

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

}

2) 我必须创建一个 class 管理员吗?

您可以使用laravel guards or something like a package to control the user access inside your application. This one可以帮助您做到这一点。

基本上你需要的是:

创建 permissions table:

php artisan make:model Permission -m

您的 table 应该是这样的:

|---permissions---|
|       id        |
|      slug       |
|   description   |  
|     name        |
|-----------------|

然后,创建一个user_has_permissions table:

php artisan make:migration create_user_has_permissions_table

这个 table 应该是这样的:

|---user_has_permissions---|
|         user_id          |
|      permission_id       |
|--------------------------|

第二个table存储用户权限。

向您的用户模型添加关系:

public function permissions()
{
    return $this->belongsToMany(Permission::class, 'user_has_permissions');
}

上面的函数return所有用户权限。

添加另一个功能,检查用户是否有某些权限:

public function hasPermission($permissionSlug)
{
    return (bool)$this->permissions()->where('slug', $permissionSlug)->count();
}

如果用户有一些权限,则hasPermission return true。否则,returns false.

现在,您可以使用 laravel gates and policies 来控制对应用某些区域的访问:

首先,创建一个用于您的门的策略:

php artisan make:policy VerifyUserPermissionPolicy

此政策将被放入 app/Policies 目录。

向您的新策略添加两种方法:

public function onlyViewRecords(User $user)
{
    return $user->hasPermission('only-view-records');
}

//And this one:
public function admin(User $user)
{
    return $user->hasPermission('admin');
}

Dont forget to add the admin and only-view-records permissions to your permissions table;

在您的 app/Providers/AuthServiceProvider 文件中,在引导方法中添加以下行:

Gate::define('admin', '\App\Policies\VerifyUserPermissionPolicy@admin');
Gate::define('only-view-records', '\App\Policies\VerifyUserPermissionPolicy@onlyViewRecords');

现在,您可以使用 laravel can 方法检查用户权限:

if ($user->can('admin')) {
    //What an admin can do?
}

if ($user->can('only-view-records') {
    //What this type of user can do?
}

或者,如果您愿意,可以使用 gate:

if (Gate::allows('admin')) {
   //The user can execute admin actions
}


if (Gate::allows('only-view-records')) {
    //This user can only view some recors
}

同样,如果你 check this package,这会容易得多。

希望对您有所帮助。