【问题标题】:making model relationship to user, user can only access its own data与用户建立模型关系,用户只能访问自己的数据
【发布时间】:2018-11-20 00:38:33
【问题描述】:

我有 2 个主模型和一些带有与主模型相关的子模型,现在我需要将用户 ID 添加到主模型和子模型,这样用户只能访问自己的数据,因为用户数据保留在同一张表上。 我创建了从user.php 到模型的belongsToMany 关系,反之亦然,pivot table 但没有任何反应 我不知道该怎么做,因为我需要简化的数据库管理,以防我需要进行迁移.. 有人可以分享您在这方面的经验吗..

【问题讨论】:

  • 添加您的模型和所需的输出

标签: laravel octobercms octobercms-plugins octobercms-backend


【解决方案1】:

我可以建议您将 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); 

基于登录的管理员用户在列表视图中过滤数据示例 [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;
    }
}

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

【讨论】:

  • 如果您在后端使用它,那么您需要使用后端用户表,并且它已经在您可以使用的地方Backend\Models\User 和更新的答案请检查它
  • 只是查看model的转储,不需要放在任何地方,用于调试目的
  • 显示实现它所需的所有数据,因为 october 没有该功能,而且当模型保存在数据库中时,您需要手动将用户附加到模型
  • 恐怕你以为一切都将在 10 月建成,但我们不需要手动添加过滤器和数据。尽管您可以使用默认功能对后端部分添加限制,但不能对数据进行限制..使用默认功能。
  • 建议的方法是将BE用户数据添加到记录中,而不是过滤数据。意味着在控制器中您需要手动添加过滤器 - 更新了过滤数据的答案,但它只会在列表视图中过滤。您需要手动添加此答案无法涵盖所有​​过滤条件的所有内容,因此添加了示例
猜你喜欢
  • 1970-01-01
  • 2019-09-24
  • 2012-07-27
  • 2016-06-19
  • 1970-01-01
  • 2021-05-04
  • 2015-01-04
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多