我有父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)为每个模型提供具体的视图,这样就不需要检查角色。例如,如果我在健身房的页面上,我不检查这个对象是否是健身房的对象,因为我知道它是健身房的页面。
我无法决定走哪条路。如果有更好的设计,我也可以尝试。
发布于 2015-10-23 22:56:00
如果健身房和用户的视图非常相似,并且您使用的是由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');
}
因为每个视图都在扩展默认布局,所以您将能够在为每种类型的用户提供唯一组件的同时拥有共享组件。
https://stackoverflow.com/questions/33305483
复制相似问题