【问题标题】:how can I hide the data that my controller returns making a CRUD in Laravel & vue.js?如何隐藏控制器返回的数据,在 Laravel 和 vue.js 中创建 CRUD?
【发布时间】:2019-11-14 16:08:51
【问题描述】:

我正在使用 vue.js 和 axios 在 laravel 中进行 CRUD。我确实创建了完整的 CRUD,但是使用从控制器返回数据的路由,但是如果我放置返回数据的路由,显然所有人都可以访问返回控制器的数据。

我正在使用 laravel 5.5、vue.js 和 axios。如果我将路由放在浏览器中,例如:localhost/tasks 显示我在控制器中传递的所有数据。

路线:

Route::get('/', function () {
    return view('dashboard');
});

Route::resource('tasks', 'TaskController',['except' => 'show', 'create', 'edit']);

控制器:

public function index()
{
    $tasks = Task::orderBy('id', 'DESC')->get();
    return $tasks;
}

app.js

data: {
        keeps: [],
        newKeep: '',
        fillKeep: {'id': '', 'keep': ''},
        errors: []
    },
    methods: {
        getKeeps: function()
        {
            //este es el nombre de las rutas (index)
            var urlKeeps = 'tasks';
            axios.get(urlKeeps).then(response =>{
                this.keeps = response.data
            });
        },

        // Metodo de editar
        editKeep: function(keep){
            this.fillKeep.id = keep.id;
            this.fillKeep.keep = keep.keep;
            $('#edit').modal('show');
        },

主要仪表板在'/'路由中,控制器从我的控制器返回数据,路由是“/tasks”和其他方法,但是当任何其他用户在浏览器中输入“www.myweb.com /tasks”它从我的控制器返回所有数据,¿我怎样才能避免这个问题?

【问题讨论】:

  • 首先我明白了你的想法,但我有一个简单的问题,即你希望数据何时显示?我的意思是您希望用户登录以便他可以访问您的数据,或者您还有其他想法吗?
  • 嗨@RYOKSecurity 我不希望在我们访问路径'/任务'时显示数据,因为它会抛出我在控制器中经历的所有内容,我不知道是否放置中间件可以限制对这些路由的访问,从而阻止其他人访问路由抛出的内容。

标签: mysql laravel vue.js axios


【解决方案1】:

如果任务模型有多个用户的数据,你应该限制tasks 路由只返回当前登录用户的数据。无论是通过 Ajax 访问还是直接在浏览器窗口中访问,都是一样的。

使用 auth 中间件限制该路由将 Eloquent 查询的任务范围限定为返回该用户的数据。

例如

$tasks = Task::where('user_id', \Auth::user()->id)->orderBy('id', 'DESC')->get();

那么用户直接访问该URL并看到自己的数据就没有关系了。

【讨论】:

    【解决方案2】:

    如果你想限制所有人进入这个路径,你可以简单地放置一个中间件,如果请求的 url 是这个然后返回主页。

    在这里你可以找到所有的中间件文档:

    https://laravel.com/docs/5.8/middleware

    关于条件,您可以简单地在您的用户表中放置一个名称,例如 tasks_access 的列,然后将其放入 nullable() 以便中间件执行 if 语句,然后如果该列为 null 然后返回重定向主页,基本上它将始终为空。

    在迁移中用户迁移

        $table->boolean('tasks_access')->nullable();
    

    那么你可以制作一个中间件,也可以在你的控制器中完成

    if (!@Auth::user()->tasks_access){
    return redirect('/user');
    

    让你的控制器变成这样

    public function index()
    {
        if (!@Auth::user()->tasks_access){
        return redirect('/user');
    }
        $tasks = Task::orderBy('id', 'DESC')->get();
        return $tasks;
    }
    

    因此,根据您的用户表,tasks_access 列默认情况下用户任务访问为空,因此它将始终将用户重定向到 /user 路由,或者您可以将其更改为 /home 或任何您想要的

    注意:我是根据您的问题回答的,但我不知道您为什么要阻止所有用户查看数据,并且首先应该与用户共享数据,因为没有用户的数据是无用的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 2018-08-30
      • 2015-05-10
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多