Hoq*_*dul 4 laravel eloquent laravel-5.1
我有
用户表喜欢
+==============+ | User | +==============+ | id | +--------------+ | firstname | +--------------+ | lastname | +--------------+ | email | +--------------+ | password | +--------------+
和我的角色表
+==============+ | Roles | +==============+ | id | +--------------+ | name | +--------------+
我的role_user表是
+=============+ | role_user | +=============+ | user_id | +-------------+ | role_id | +-------------+
如何检查当前登录的用户是管理员还是普通用户?
Mar*_*łek 15
您需要roles在User模型中添加关系,如下所示:
public function roles()
{
return $this->belongsToMany(App\Role::class);
}
Run Code Online (Sandbox Code Playgroud)
现在你需要isAdmin像这样创建用户:
public function isAdmin()
{
return in_array(1, $this->roles()->pluck('role_id')->all());
}
Run Code Online (Sandbox Code Playgroud)
当1您输入管理员角色的ID时.当然它也可以用其他方式定义,但一切都取决于如何使用它.
它也可以这样定义:
public function isAdmin()
{
return $this->roles()->where('role_id', 1)->first();
}
Run Code Online (Sandbox Code Playgroud)
现在在你的刀片中你可以做到:
@if (auth()->check())
@if (auth()->user()->isAdmin())
Hello Admin
@else
Hello standard user
@endif
@endif
Run Code Online (Sandbox Code Playgroud)
它不是这个简单功能的ACL,您甚至不需要数据库表,roles您可以添加额外的tinyInteger status列并添加数字,例如:
要使其正常运行,请将以下代码添加到您的User.php.
public function isDisabled ()
{
return $this->statusCheck();
}
public function isVisitor ()
{
return $this->statusCheck(1);
}
public function isAdmin ()
{
return $this->statusCheck(2);
}
protected function statusCheck ($status = 0)
{
return $this->status === $status ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
要签入blade模板,您可以添加
@if(Auth::user()->isDisabled())
You are not Active
@elseif(Auth::user()->isVisitor())
Welcome to example.com
@elseif(Auth::user()->isAdmin())
Welcome Admin
@endif
Run Code Online (Sandbox Code Playgroud)
此外,您可以制作刀片自定义指令,将此代码粘贴到您的app/providers/AppServiceProvider.phpinboot()方法中。
// Blade custom directives for isAdmin
Blade::directive('isAdmin', function() {
return "<?php if(Auth::user()->isAdmin()): ?>";
});
Blade::directive('endisAdmin', function() {
return "<?php endif; ?>";
});
// Blade custom directives for isVisitor
Blade::directive('isVisitor', function() {
return "<?php if(Auth::user()->isVisitor()): ?>";
});
Blade::directive('endisVisitor', function() {
return "<?php endif; ?>";
});
// Blade custom directives for isDisabled
Blade::directive('isDisabled', function() {
return "<?php if(Auth::user()->isDisabled()): ?>";
});
Blade::directive('endisDisabled', function() {
return "<?php endif; ?>";
});
Run Code Online (Sandbox Code Playgroud)
要调用它,您需要在您的 blade view
@isAdmin()
Welcome Admin
@endisAdmin
@isVisitor()
Welcome to example.com
@endisVisitor
@isDisabled()
Your are not active
@endisDisabled
Run Code Online (Sandbox Code Playgroud)
简而言之,laravel 为您提供了多种解决问题的方法,这取决于您的需求和应用程序结构。
角色.php
use Illuminate\Database\Eloquent\Model;
class Role extends Model {
protected $fillable = [
'name'
];
/**
* A role can have many users.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function users() {
return $this->belongsToMany('App\User');
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将其添加到用户模型中:
public function isAdmin()
{
foreach ($this->roles()->get() as $role)
{
if ($role->name == 'Admin')
{
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
看法
@if(Auth::check())
@if (Auth::user()->isAdmin())
<h2>Admin user enter code here<h2>
@endif
@endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15349 次 |
| 最近记录: |