代码之家  ›  专栏  ›  技术社区  ›  Isral Bustami

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

  •  1
  • Isral Bustami  · 技术社区  · 6 年前

    我有2个主要模型和一些与主要模型有关系控制器的子模型,现在我需要向主模型和子模型添加用户ID,因此用户只能访问自己的数据,因为用户数据停留在同一个表上。 我创造 belongsToMany 关系来自 user.php 对于模型,反之亦然 pivot table 但什么也没发生 我不知道怎么做,因为我需要简化数据库管理,以防我需要迁移。 有人能分享你的经验吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Hardik Satasiya    6 年前

    我可以建议你只是添加 user_id [对于后端=> 后端用户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中数据的示例[ OctoBCMS不提供这样的功能外盒,你不能隐藏一部分数据记录,你可以隐藏整个菜单或基于权利和角色的所有记录,但不能隐藏部分记录 ]

    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;
        }
    }
    

    如有任何疑问,请评论。