php - 检查页面中的用户角色

标签 php oop laravel design-patterns

我有父 User 类,其实例在用户通过身份验证时返回。 User 实例具有指示用户角色的 role_id。系统中一共有三个角色; standarduser, trainer 和 gym(每个在数据库中都有不同的表),每个都有不同的功能和权限。

我可以做一些可能性;

1) 我可以在User 的模型类中编写角色检查;

public function getName()
{
    if($user->role == 0)
    {
        $user->standarduser()->name;
    }
    else if($user->role == 1)
    {
        $user->gym()->name;
    }
}

public function getGymUsers()
{
    if($user->role == 2)
    {
        $user->gym()->users;
    }
    else
    {
        return null;
    }
}

2) 我可以为每个角色类编写函数,但在 View (或 Controller )中,我必须进行该控制;

if($user->isStandarduser())
{
    echo $user->standarduser()->name;
}
. . .

if($user->isGym())
{
    echo $user->gym()->users;
}
else
{
    echo "";
}

3) 为每个模型创建特定 View ,这样就无需检查角色。例如,如果我在健身房的页面中,我不会检查该对象是否是健身房对象,因为我知道它是健身房的页面。

我无法决定要走哪条路。如果有更好的设计我也可以试试。

最佳答案

如果gym和用户的 View 极其相似,而且你使用的是laravel提供的blade引擎,那么你可以使用blade的模板系统

http://laravel.com/docs/5.1/blade

/resources/layouts/default.blade.php

<body>
    <h1>@yield('name')</h1>
    <div>@yield('content')</div>
    <p>stuff that is the same for all users</p>
</body>

/resources/gym.blade.php

@extends('layouts.default')

@section('name',$user->gym()->name)

@section('content')
<p>This is content unique to the gym</p>
@endsection

/resources/standarduser.blade.php

@extends('layouts.default')

@section('name',$user->standarduser()->name)

@section('content')
<p>This is content unique to a standard user</p>
@endsection

Controller

public function show($id){
    $user = User::where($id)->first();
    if($user->isGym())
        return view('gym', ['user' => $user]);
    else if($user->isStandardUser())
        return view('standarduser', ['user' => $user]);
    else
        abort(500,'Not implemented yet');
}

因为每个 View 都扩展了默认布局,所以您将能够共享组件,同时为每种类型的用户提供独特的组件

关于php - 检查页面中的用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305483/

相关文章:

php - Magento - 使用 SQL 查询删除所选产品

php - 将来自 2 个不同来源的数据插入到 MySQL 的一张表中

php - 在php继承中执行__constructor()

PHP 绑定(bind) PDO 数组

Laravel: URL::route() 只打印没有网站名称的路由链接

laravel - "Class ' Fideloper\Proxy\TrustProxies ' not found"LARAVEL

php - 为什么这个 php 不能工作但可以这样工作?

php - 在 mysql 查询中以逗​​号分隔搜索

php - 在类中设置变量

php - Laravel Paypal - 从网站传递送货地址