我目前正在使用Laravel 4 PHP Framework构建一个Web应用程序,我的应用程序的一部分只对订阅者和管理员可见;显然我不希望客人看到我网站的这些部分。
每个用户都有role_id
,它对应于抽象静态类中的值,作为枚举:
abstract class UserRole {
const Unauthenticated = 1;
const Member = 2;
const Subscriber = 3;
const CharterSubscriber = 4;
const Moderator = 5;
const Administrator = 6;
}
因为我的很多内容都是动态的,具体取决于用户的角色;我发现我在视图中使用Blade PHP语法检查用户是否具有特定角色或更高级别。
要做到这一点,我必须使用相当冗长的语法:
@if (Auth::user() && Auth::user()->role_id == UserRole::Administrator)
......就是一个很好的例子。这里的问题是我首先要检查Auth :: user()是否存在;如果没有,第二次逻辑比较将失败,所以我甚至不能这样做:
@if (Auth::user()->role_id == UserRole::Administrator)
......哪个更干净,但仍然相当冗长。理想情况下,我想做类似的事情:
@if (Auth::isAdmin())
...或...
@if (Auth::isSubscriberOrGreater())
我怎么能做到这一点?我对Laravel的IOC容器知之甚少,所以任何答案都必须得到合理的解释。
答案 0 :(得分:0)
我可以提出一个解决方案,虽然它可能有点难看:
Auth::user() method返回User模型或NULL,因此在用户模型中,您可以检查用户是否使用isAdmin方法管理员(或者您可以执行任何其他检查),如下所示:
public function isAdmin(){
if( $this->role_id == 6){
return True;
}
return False;
}
(实际上你可以调用方法任何其他名称并在那里执行任何其他检查)。 然后在刀片模板中你会有这样的东西:
@if (@Auth::isAdmin())
为了避免发出通知,你只需在变量前放置一个{@ 3} {/ 3}。