我想区分两种类型的用户。管理员和用户基本。 管理员可以创建几条录音,但只能看到的基本用户除外。
在这里,用户Admin
添加了录音
我的第二个用户只能看到录音,但我不知道该怎么做?
我的问题:
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类吗?
答案 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');
}
不要忘记将
admin
和only-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,这将非常容易。
希望有帮助。