检查页面中的用户角色

时间:2015-10-23 14:58:19

标签: php oop laravel design-patterns

我有父User类,当用户通过身份验证时会返回其实例。该User实例具有role_id,表示用户的角色。系统中有三个角色;标准用户,培训师和健身房(每个都有不同的数据库表),每个都有不同的功能和特权。

我可以做一些事情;

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)我可以为每个角色类编写函数,但在视图(或控制器)中,我必须执行该控制;

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

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

3)为每个模型制作特定视图,这样就不需要检查角色了。例如,如果我在健身房的页面上,我不会检查该对象是否是健身房对象,因为我知道它是健身房的页面。

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

1 个答案:

答案 0 :(得分:1)

如果健身房和用户的视图非常相似,并且您正在使用laravel提供的刀片引擎,那么您可以使用刀片的模板系统

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

<强>控制器

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');
}

因为每个视图都在扩展默认布局,所以您可以拥有共享组件,同时为每种类型的用户提供独特的组件