我们希望所有用户无论访问级别如何都使用有效凭据登录。为什么我的代码失败了?

时间:2014-03-15 02:30:19

标签: jquery sql sql-server sql-server-2005 sql-server-2008-r2

我们的网站有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

2 个答案:

答案 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

现在,为了管理访问和身份验证,所需要的是另一个问题。