什么是检查用户是否在我的Laravel应用程序中具有特定角色的快速方法?

时间:2015-05-10 10:28:18

标签: php authentication laravel ioc-container

我目前正在使用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容器知之甚少,所以任何答案都必须得到合理的解释。

1 个答案:

答案 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}。