如何根据用户查询数据在视图中设置动态“位置”?

Posted

技术标签:

【中文标题】如何根据用户查询数据在视图中设置动态“位置”?【英文标题】:How to set a dynamic "where" in a view based on the user querying data? 【发布时间】:2019-08-14 16:45:27 【问题描述】:

我需要创建一组视图,具有选择权限的数据库用户将在其中查询数据,但我想创建一个通用视图,因此如果其他用户想查询相同的数据,我不需要创建基于他们的“user_id”的更多视图。一个例子是:

CREATE OR REPLACE VIEW user_data AS SELECT * FROM users JOIN something WHERE user_id = ?

有没有什么办法可以设置,如果查询数据的数据库用户是“db_user1”,那么上面select的视图会使用1作为user_id进行查询?如果数据库用户是db_user2,那么where user_id 会被设置为2?

【问题讨论】:

参数化视图函数Pass In “WHERE” parameters to PostgreSQL View? 【参考方案1】:

对于这个特定的用例,您可以做一些简单的事情:

create or replace view user_data AS 
  select * from users 
  where user_id = (select substring(current_user, length(current_user))::int);

但是,如果用户名的结尾不是可以转换为 int 的值,则会返回错误。

您可能希望研究行级安全性以获得更强大和可配置的东西。

【讨论】:

以上是关于如何根据用户查询数据在视图中设置动态“位置”?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Linq 根据用户属于另一个表的位置来查询表

如何根据用户位置查询 mySQL [关闭]

如何根据位置从“回收”视图中删除Firebase数据库密钥

如何获取单击的选中按钮的视图位置以及如何根据其位置将其设置为选中状态

根据用户位置动态更改页面内容

如何在 iOS 中根据位置设置推送通知?