我有5个用户个人资料:SuperAdmin,FederationPresident,AssociationPresident,ClubPresident,simpleUser
我可以随着时间的推移而成长。
所以关系很简单:
一个简单的用户属于一个俱乐部
俱乐部属于协会
协会属于联邦。
现在,我在用户表中只有一个“类型”字段来区分它们。
现在,我正在构建它,但我一直在编写代码:
if (Auth::user()->isSuperAdmin){
...
}elseif (Auth::user()->isPresidentFederation()){
...
}
我想重构它,因为编码它是一种令人毛骨悚然的方式。
现在,首先,我管理了角色,并在我的代码中使用了@can('dothis'),但在我的情况下它太多了,并且它不适合我的用例,所以我删除了它
无处不在,我必须测试记录哪种用户以了解他能够执行的操作。
我已经使用中间件限制访问未经授权的页面。
对于用户列表,SuperAdmin可以看到所有用户,FederationPresident可以看到他的联盟的所有用户,AssociationPresident可以看到他的关联的所有用户等。
所以,我这样管理:
$associations = Association::with('federation.country')
->whereHas('federation', function ($query) {
if (!Auth::user()->isSuperAdmin()) {
$query->where('president_id', Auth::user()->id);
}
})->get();
但是在这种情况下,我会为俱乐部列表执行此操作,查询会增加,因为我需要检查记录的用户类型。
我的代码中的所有“if”都有点烦人,因为它们无处不在......
任何帮助将不胜感激!