首页 > 解决方案 > 如何限制普通用户创建和更新书籍?

问题描述

我在一个实现书籍 crud 的项目中实现用户角色。我希望只有管理员可以创建、更新和删除书籍。在我的 app.blade.php 中,我编写了以下代码

<ul class="nav navbar-nav navbar-right">
                            <!-- Authentication Links -->
                            @if (Auth::guest())
                            <li><a href="{{ url('/login') }}">Login</a></li>
                            <li><a href="{{ url('/register') }}">Register</a></li>
                            @else
                            @if(auth()->user()->hasRole('User'))
                                <li>
                                    <a href=""> User </a>
                                </li>
                            @endif
                            <li class="dropdown">
                                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
                                    {{ Auth::user()->name }} <span class="caret"></span>
                                </a>

                                <ul class="dropdown-menu" role="menu">
                                    <li>
                                        <a href="{{ url('/logout') }}"
                                           onclick="event.preventDefault();
                                                   document.getElementById('logout-form').submit();">
                                            Logout
                                        </a>

                                        <form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;">
                                            {{ csrf_field() }}
                                        </form>
                                    </li>

                                </ul>
                            </li>

                            <li><a href="{{ url('/books/index') }}">Books</a></li>

                            @if(auth()->user()->hasRole('admin'))
                            <li><a href="{{ url('/categories/index') }}">Categories</a></li>
                            <li><a href="{{ url('/authors/index') }}">Authors</a></li>
                            <li><a href="{{ url('/publishers/index') }}">Publishers</a></li>
                            @endif
                            @endif
                        </ul>
                    </div>

当我以用户身份登录时,它只给我书籍视图,但是当我将http://127.0.0.1:8000/books/create放在浏览器中时,它会将我带到创建书籍视图并创建书籍 在此处输入图像描述

但我希望如果我以用户身份登录,那么我将无法创建或更新书籍。我该如何解决这个问题?

标签: mysqllaravelauthenticationpermissions

解决方案


Try This code.
I think you are using auth() in blade Try AUth() in your if condition. 
@if(Auth()->user()->hasRole('admin'))
<li><a href="{{ url('/categories/index') }}">Categories</a></li>
<li><a href="{{ url('/authors/index') }}">Authors</a></li>
<li><a href="{{ url('/publishers/index') }}">Publishers</a></li>
@endif

Other Possibility is:

First add is_admin column in your migration

public function up()
{
Schema::create('user', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->boolean('is_admin')->default(0);
    $table->rememberToken();
    $table->timestamps();
});

Then you can check

@if($user->is_admin)

@endif

推荐阅读