2017-01-05 33 views
0

我正在制作一个Laravel应用程序,该应用程序具有诸如用户,项目,user_items等“服务”表。限制数据库中的表,用户可以在Laravel中运行查询

此外,我有我需要允许用户运行他们的查询表。也就是说,用户将他的查询发送到服务器并在那里运行。

问题是:我想允许用户只运行SELECT查询并禁止运行UPDATE,INSERT和DELETE。 另外,我需要允许只在确定的表上运行这些查询。也就是说,用户不允许从用户表中进行选择。

用户将运行原始查询,即DB:raw()将被使用。

我怎么能在Laravel中做到这一点?

其中一个解决方案是创建两个数据库:MYSQL和sqlite,并允许用户只使用sqlite来运行查询,但在这种情况下测试会出现问题。

+0

您的意思是,有些用户可以使用表格,有些用户则不允许? –

+0

不是。我的应用程序的所有用户都可以将自己的查询发送到应用程序。这将是一个应用程序,它将检查用户是否正确查询任务。例如,用户将有任务从表中选择商品。他将发送查询“SELECT * FROM goods”,服务器将检查它是否正确完成。 –

+0

首先检查用户是否有权使用此功能,然后执行查询。如何执行查询,然后检查用户是否有权使用此功能。 –

回答

1

您需要使用GRANT和REVOKE命令。首先创建用户如文献

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass'; 
GRANT SELECT ON db1.* TO 'jeffrey'@'localhost'; 

概述然后撤销一个

REVOKE SELECT ON db1.tablename FROM 'jeffrey'@'localhost' 

过剩之一,你将不得不这样做的每个表。所以有一个选择是编写一个PHP脚本,它可以在循环中执行它

+0

感谢您的回答,但我想在不改变数据库的情况下以编程方式执行此操作。 –

+0

这是不可能的,这是做到这一点的正确方法。这是一个解决的问题。除此之外,您如何防止使用相同用户名和密码的人使用控制台更改数据库并传递laravel? – e4c5

相关问题