我们的网站有5页。只允许一组访问级别为3的用户查看所有站点。
没有访问级别3的人拥有较少的权限。
table1列出了访问级别为3的所有用户
因此结构如下:
table1
table1Id
access_level
userid
然后是table2与其他用户
table2
table2Id
userId
username
password
table1中的所有用户也属于table2。这就是他们能够看到所有页面的原因。
userId是table1和table2之间的关系。
我想通过以下查询完成的工作是确保在table1和table2上的所有用户都被考虑在内。
换句话说,他们都有能力成功登录。
我的任务的第二部分是确保只有访问级别为3的用户才能看到所有页面,而没有访问级别的用户则看到有限的页面。
这部分不是这个问题的一部分。
我的问题是,我如何确保所有用户都能够成功登录,只要他们的凭据可以通过身份验证?
以下是代码,并提前感谢您的帮助。
select username,
password,
isnull(access_level,0) access_level
from table2 e
left join table1 m on e.userid = m.userid
where username is not null
此查询仅生成0(零)。
共有589条记录,其中access_level 3,总计7,209条记录。
这适用于SQL Server
答案 0 :(得分:0)
关键是匹配用户是否处于3级并进行正确的验证。
我会使用UNION子句进行查询,在WHERE子句中我会写出类似的东西(我不确定你的所有表或验证规则,但尝试获得ideia):
WHERE (access_level = 3 || username = ? AND password = ?)
答案 1 :(得分:0)
始终在问题中包含CREATE TABLE和INSERT语句。这些是极少的,只是受过教育的猜测。
create table table2 (
table2Id integer primary key,
userId integer not null unique,
username varchar(20) not null unique,
password varchar(15) not null
);
create table table1 (
table1Id integer primary key,
access_level integer not null,
userid integer not null references table2 (userId)
);
insert into table2 values (1, 1, 'a', 'a');
insert into table1 values (1, 3, 1);
insert into table2 values (2, 2, 'b', 'b');
恕我直言,table1.access_level和table2.username应声明为NOT NULL。我记住了你的查询。
select e.username,
e.password,
coalesce(m.access_level, 0) as access_level
from table2 e
left join table1 m on e.userid = m.userid
username password access_level
--
a a 3
b b 0
现在,为了管理访问和身份验证,做所需要的是另一个问题。