我在云上有一个任务表,我希望用户能够与他人分享他们的任务。我需要能够告诉哪些用户可以读取每个给定的行。
谢谢。
答案 0 :(得分:1)
它基本上归结为索引。您可以索引访问控制列表中的访问控制条目以进行有效查询吗?
如果您的表格如下:
create table task (
id int primary key,
subject varchar(255) not null,
owner varchar(255) not null references some_user_table(name), --owner can has full permission on own record
acl varchar(max) null
);
ACL可能如下所示:
[ {grantee:"public", read:true, write:false, grantor:"reverend"} ]
你如何索引这些值?在Posgres中,您可以索引JSON整个字段或单个JSON数组条目,但不能索引所有数组条目。我不太熟悉SQL Server中的XML索引,但是it exists。
如果您的架构如下所示:
create table task (
task_id int primary key,
subject varchar(255) not null,
owner varchar(255) not null --references some user table
);
create table task_acl (
task_id int references task(task_id) on delete cascade,
grantee varchar(255) not null, --the role getting the privilege
privilege char(1) not null check (privilege in ('r', 'w', 't') ), --r=read, w=write, t=take ownership
admin_option boolean not null default false, --whether grantee can grant privileges to others for this task
grantor varchar(255) not null default current_user, --the role granting the privilege
primary key (id, grantee, privilege)
);
然后至少你可以索引被授权者和特权字段。
您可以使用WHERE EXISTS
子句查询此内容,以查看当前用户是否在ACL中。
答案 1 :(得分:0)
您可以使用视图在数据层内完成。