Laravel 4 Validator - 验证post是否属于属于当前用户的类别

时间:2014-10-25 11:41:21

标签: php validation laravel

我有3个表,"链接"," links_categories"和"用户"我希望允许用户删除链接,但我需要检查链接是否属于用户,这里是我的表格如何工作:

links
----------------
id
category_id

links_categories
----------------
id
user_id

users
----------------
id

我定义了我的关系:

class Link extends Eloquent
{
    public function category()
    {
        return ($this->belongsTo('LinkCategory', 'category_id', 'id')->with('categoryType'));
    }
}

class LinkCategory extends Eloquent
{
    public function links()
    {
        return ($this->hasMany('Link', 'category_id'));
    }

    public function user()
    {
        return ($this->belongsTo('User'));
    }
}

class User extends Eloquent implements UserInterface, RemindableInterface
{
    public function linkCategories()
    {
        return ($this->hasMany('LinkCategory')->with('links', 'categoryType'));
    }
}

他们是否可以轻松验证链接属于用户的事实?

感谢。

1 个答案:

答案 0 :(得分:1)

如果你想在前面限制删除 - 比如说,在链接列表中,你想只向用户显示属于它们的链接旁边的“删除”按钮 - 那么你可以检查{{ 1}}显示链接时对user_id。对于每个链接,Auth::user()->id都可以在user_id访问,您可以在获取链接列表时使用$link->category->user_id急切加载。

或者(或者另外),您可以设置一个模型事件侦听器,只要删除链接就会执行此验证。在->with('category')模型中,设置您的监听器:

links

链接的public static function boot() { parent::boot(); static::deleting(function($link) { if ($link->category->user_id != Auth::user()->id) { Session::flash('error', 'delete_unauthorized'); return false; } }); } 侦听器将检查用户是否有权删除链接,如果没有,则会返回deleting(这会阻止删除)并向其发送错误代码如果您需要向用户提供反馈,则可以根据需要处理下一个请求。使用模型事件的一个很好的演练是http://driesvints.com/blog/using-laravel-4-model-events

您可以使用模型观察器扩展此功能;见http://matthewhailwood.co.nz/laravel-model-validation-using-observers/