我正在使用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”,它将返回控制器中的所有数据,“如何避免该问题?
答案 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或所需的任何内容>
注意:我是根据您的问题回答的,但我不知道您为什么要阻止所有用户查看数据,并且首先应该与用户共享数据,因为没有用户的数据是无用的