如何在laravel刀片视图中检查用户是否为Admin

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

您需要rolesUser模型中添加关系,如下所示:

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)


Hai*_*ani 6

它不是这个简单功能的ACL,您甚至不需要数据库表,roles您可以添加额外的tinyInteger status列并添加数字,例如:

  • 0 = 禁用
  • 1 = 访客
  • 2 = 管理员。

要使其正常运行,请将以下代码添加到您的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 为您提供了多种解决问题的方法,这取决于您的需求和应用程序结构。


Hoq*_*dul 4

角色.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)