新手的管理员和用户

时间:2019-07-22 22:54:14

标签: laravel admin

我想区分两种类型的用户。管理员和用户基本。 管理员可以创建几条录音,但只能看到的基本用户除外。

enter image description here

在这里,用户Admin添加了录音

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

enter image description here

我的问题:

1)我必须在表“ 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)我必须创建一个Admin类吗?

1 个答案:

答案 0 :(得分:1)

您可以使用laravel guards或类似软件包的程序来控制用户对应用程序的访问。 This one可以帮助您做到这一点。

基本上,您需要的是

创建一个permissions表:

php artisan make:model Permission -m

这是您的表格外观:

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

然后,创建一个user_has_permissions表:

php artisan make:migration create_user_has_permissions_table

此表应如下所示:

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

第二个表存储用户权限。

向用户模型添加关系:

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

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

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

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

如果用户具有某些权限,则hasPermission返回true。否则,返回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');
}
  

不要忘记将adminonly-view-records权限添加到您的权限表中;

在您的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,这将非常容易。

希望有帮助。