我正在开发一个应用程序,其中我有不同角色的视图。
例如,我有一个包含5个字段的表单。它可能有3个字段用于角色1,而角色5的所有字段在提交时都可用。
现在,在我以图形方式或使用表格显示表单数据的情况下,我可以选择为某些角色显示5个列或字段,为其他角色显示较少的字段。
现在我正在做if if逻辑在控制器的每个动作中确定角色然后将相应的数据传递给视图,你如何管理呢?我想知道。
请在阅读前仔细阅读'给我看一些代码:('
编辑: 还有一个问题,假设有一个用户类,并且在我可以做的视图中与类型类有1对1的关系:
{{ Auth::user()->type->key }}
或者像
这样复杂的{{ Auth::user()->as_member->claims->sum('amount_claimed') }}
这是一个复杂的关系,作为会员的用户有很多主张,我在这里总结一下。在控制器中执行此操作然后将它们作为值传递会更好吗?
答案 0 :(得分:0)
一般来说,用户和角色共享多对多关系。用户可以拥有许多角色,许多用户可以共享角色。
要实现它,需要三个数据库表
1.用户
2.角色
3. role_user(数据透视表)
然后可以在模型中将关系定义为
class User extends Model
{
public function roles()
{
return $this->belongsToMany('App\Roles');
}
//suppose you currently want to assign each user only one role
//however also want to provision multiple roles for user in future
//then you can define a virtual/calculated attribute to your model
//to simplify usage considering each user has only one role
public function getRoleAttribute()
{
return $this->roles[0]->name; //name is a field on the roles table
}
protected $appends = ['role']; //to ensure that the calculated attribute is available to ajax/json/api requests as well
}
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User');
}
}
假设您有三个用户作为样本数据
User1有角色'用户'
User2有角色'经理'
User3有角色'管理员'
现在,您可以使用示例视图(如
)测试功能<h4>Current user is {{auth()->user()->name}} having a role of {{auth()->user()->role}}</h4>
<div class="example-form">
<h4 class="all">Visible to all - User1, User2, User3</h4>
@if( (auth()->user()->role ==='Manager') || (auth()->user()->role ==='Admin'))
<h4>Visible to Manager and Admin only - User2 and User3</h4>
@endif
@if(auth()->user()->role === 'Admin')
<h4>Visible only to Administrator - User3</h4>
@endif
</div>
希望这是你的目标 - 我的理解还可以。
但是,既然您已经提到过使用Laravel 5.2,那么更好的方法是使用Laravel 5.2提供的开箱即用授权。