表格视图中的隐私条件

时间:2016-05-30 09:56:48

标签: postgresql

我有一个包含两个关键列的表,即用户和隐私。我的想法是编写表视图以参考相关列来查询我的表。

我想要一个包含以下条件的表视图:

 user=current_user()AND privacy = "TRUE"
 + user!=current_user() AND privacy="FALSE"

所以我想要的是视图显示current_users和私有条目以及那些未切换到私有条目的条目。

这样做的最佳方法是什么。是if else语句还是where参数有效?

1 个答案:

答案 0 :(得分:0)

如果我说得对,用户应该看到自己的条目和其他人的条目。未标记为私人的条目。

根据表格(将user更改为usr,因为它是保留的关键字:

db=# create table entries(id serial, message text, usr text, is_private boolean); 
CREATE TABLE

以下测试数据:

db=# insert into entries(message, usr, is_private) values
  ('postgres private entry', 'postgres', true),
  ('postgres public entry', 'postgres', false),
  ('test private entry', 'test', true),
  ('test public entry', 'test', false);
INSERT 0 4

您可以按如下方式定义视图:

db=# create view entries_v as
  select * from entries
  where usr = current_user or not is_private;
CREATE VIEW

postgres看到了什么:

db=# \c - postgres
You are now connected to database "db" as user "postgres".

db=# select * from entries_v;
 id |        message         |   usr    | is_private 
----+------------------------+----------+------------
  1 | postgres private entry | postgres | t
  2 | postgres public entry  | postgres | f
  4 | test public entry      | test     | f
(3 rows)

现在test

db=# \c - test
You are now connected to database "db" as user "test".

db=> select * from entries_v;
 id |        message        |   usr    | is_private 
----+-----------------------+----------+------------
  2 | postgres public entry | postgres | f
  3 | test private entry    | test     | t
  4 | test public entry     | test     | f
(3 rows)