如何在Laravel和vue.js中隐藏控制器返回的数据以进行CRUD?

时间:2019-07-03 23:38:07

标签: mysql laravel vue.js axios

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

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

路线:

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”,它将返回控制器中的所有数据,“如何避免该问题?

2 个答案:

答案 0 :(得分:2)

如果“任务”模型具有多个用户的数据,则应限制GroupBy()路由以仅返回当前登录的用户数据。无论是通过Ajax还是直接在浏览器窗口中进行访问,都是相同的。

使用tasks中间件限制该路由,并限制任务口才查询以返回该用户的数据。

例如

auth

然后,用户是否直接访问该URL并查看自己的数据都没关系。

答案 1 :(得分:0)

好吧,如果您想限制所有人进入此路径,您可以简单地放置一个中间件,如果请求的URL是该中间件,则返回首页。

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

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

关于这种情况,您可以简单地在用户表中放入一列其名称,例如tasks_access,然后将其放入nullable(),以便中间件执行if语句,然后如果此列为null,则返回重定向主目录,基本上它将始终为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;
}

因此,根据用户表的task_access列,默认情况下,用户任务的访问权限为null,因此它将始终返回将用户重定向到/ user路由,或者您可以将其更改为/ home或所需的任何内容

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