根据Laravel的模型,根据请求过滤用户的访问权限

时间:2015-02-06 18:49:09

标签: php laravel laravel-4

我有一张满是Products的桌子。但是,对于每个用户,只允许一组产品来查看。这是通过表 users_products_permissions 完成的。每个用户都有一个UsersPermissions表的实例。在此表格中,我设置了一系列要对用户应用的限制,限制说每个产品允许用户“查看”。这是通过user_permission_idproduct_id组成的“弱”(我们称之为brasilian葡萄牙语)表来完成的。

当请求时,请求用户将被记录,当然。

问题取决于:如何根据用户对产品的限制过滤产品?

如果用户模型可以访问此产品,则无需手动签入每个请购单。一种自动的方式,让我们说......

如果需要任何代码,请说出来!

2 个答案:

答案 0 :(得分:2)

对于4.2: 使用全局范围来确定整个模型的范围。

http://laravel.com/docs/4.2/eloquent#global-scopeshttp://softonsofa.com/laravel-how-to-define-and-use-eloquent-global-scopes/

对于4.0: http://www.laravel-tricks.com/tricks/global-scope-modelLaravel Eloquent Query Builder Default Where Condition

<?php

class Product extends Eloquent {

    public function newQuery()
    {
      return parent::newQuery()->where('permission', '=', 1);
    }
}

答案 1 :(得分:1)

您可以使用查询范围。通过范围,您可以轻松地在模型中重复使用查询逻辑。要定义范围,只需在模型方法前加上范围:

class User extends Eloquent {

    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    public function scopeWomen($query)
    {
        return $query->whereGender('W');
    }

}

使用查询范围

$users = User::popular()->women()->orderBy('created_at')->get();