新手的管理员和用户
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,这会容易得多。
希望对您有所帮助。
我想分开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
andonly-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,这会容易得多。
希望对您有所帮助。