与用户建立模型关系,用户只能访问自己的数据

时间:2018-06-10 17:25:17

标签: laravel octobercms octobercms-plugins octobercms-backend

我有2个主要模型和一些带有relationController到主模型的子模型,现在我需要为主模型和子模型添加用户ID,因此用户只能访问自己的数据,因为用户数据保留在同一个表中。 我创建belongsToManyuser.php到模型的关系,反之亦然pivot table但没有任何关系 我不知道如何做到这一点,因为我需要简化数据库管理,以防我需要进行迁移。 有人可以分享你的经验..

1 个答案:

答案 0 :(得分:3)

我可以建议您添加user_id [for Backend => backend_users_id ]模拟您希望仅访问所有者的数据。

现在在main model您可以定义belongsTo关系,在用户中您可以定义hasMany关系

  

主要模型关系[如果您想在后端限制用户,则需要在后端用户模型中添加后端用户关系]

class MainModel extends Model
{
    // Adding relation to user model
    public $belongsTo = [
        'user' => 'RainLab\User\Models\User',
        'backend_users' =>'Backend\Models\User' // for Backend
    ];

}
  

添加与用户模型的关系[您需要将此代码放入插件的启动方法]

// Extending User Model
\RainLab\User\Models\User::extend(function($model) {
    $model->hasMany['mainmodel'] = ['HardikSatasiya\Plugin\Models\MainModel'];
});

// for Backend users
\Backend\Models\User::extend(function($model) {
    $model->hasMany['mainmodel'] = ['HardikSatasiya\Plugin\Models\MainModel'];
});
  

现在访问数据[前端]

// Returns the signed in user
$user = \Auth::getUser();
dd($user->mainmodel); // it will return collection of related mainmodels

// it will return related data and now its filter by owner
dd($user->mainmodel[0]->otherRelatin); 


// for Backend users
// Returns the signed in user
$user = \BackendAuth::getUser();
dd($user->mainmodel); // it will return collection of related mainmodels

// it will return related data and now its filter by owner
dd($user->mainmodel[0]->otherRelatin); 
  

listview中的示例过滤数据基于登录的管理员用户[ OctoberCMS不提供开箱即用的此类功能,您无法隐藏部分数据记录,您可以隐藏整个菜单或基于权限的所有记录和角色但不能隐藏部分记录]

public function listExtendQuery($query)
{
    $user = \BackendAuth::getUser();
    $query->where('backend_users_id', $user->id);
}
  

添加backend_users_id即可使用此代码

class MainModel extends Model {

    public function beforeSave()
    {
        $user = \BackendAuth::getUser();
        $this->backend_users_id = $user->id;
    }
}

如果有任何疑问请发表评论。