mysql - 从数据库中获取用户权限 - 概念问题

标签 mysql database-design asp-classic roles

我有一个用户表

ID    status
1     5
2     50
3     60
4     999
5     5

表中的每个用户都有其状态。状态意味着:

5 = normal user
50 = article writer
60 = blog writer
999 = administrator

在我拥有正常的状态值递增线性系统之前,一切都很好。如果页面仅供管理员访问,我对状态 999 进行 session 检查,如果页面可由最小状态用户访问,我检查状态是否 > 2 等......无需访问数据库即可工作(我在 session 中获取了状态变量,以便仅在 session 超时和首次访问时查询 mysql)。

现在我遇到了文章作者和博客管理员的问题……概念有问题。我只能将 = 或 > 应用于状态,因此只允许一种状态或任何更高的状态。管理员可以看到所有内容,因此它具有最高编号。

现在我希望用户 2 也能成为博客作者,所以实际上有 2 个确切的角色。他需要同时拥有状态 50 和 60。 60 并不高,因为我不希望每个博客作者也能看到文章管理。现在该怎么办?

我当然可以放入状态列 50,60,然后解析出正确的列,但我会松开数字列,我认为将列字段误用于多个值是一种不好的做法。

合乎逻辑的方法是制作一个像这样的状态表

IDuser     status
2          50
2          60
3          60
1          5
5          5
4          999

因此,当我在博客页面上时,我可以查询确切的所需状态,并且一个用户可以拥有多个角色...

但是... 正如我所写的,我在使用经典 ASP 的 session 变量中有状态,而不是在每个页面上查询数据库。如果我制作另一个状态表,我将需要在每个页面上查询状态表以查看是否包含该用户的角色。我想以某种方式将此信息保存在内存中,但我不确定如何。

或者还有别的办法?

最佳答案

保持数据库表和代码可读的 hashmap 解决方案可以是:

在 header.inc 上

'add new tasks  here  (and in perfiles table) '
mask_order = "write_article,read_article,write_blog,read_blog"

' this function can be coded 2 ways: checking bad parameters or   '
' not checking bad parameters (best perfomance, but unpredictible problems on wrong calls), i coded this way here '
function can_user(what)
    x = split(" " & mask_order, what)    ' the extra space is needed here '
    x = ubound(split(x(0), ","))+1
    can_user = (session("mask") and 2^x)<>0
end function

在 login.asp 或 session 重新启动时

sql="select users.usuario, perfiles.* from users inner join perfiles on users.perfil=perfiles.perfil" _
 & " where usuario = '" & limpia(quien) & "' and pass ' = '" & limpia(password) & "';"
r.open sql, c
ok = not r.eof
if ok then 
    mask = 0: i = 0
    for each campo in split(mask_order, ",")
      i = i +1
      if r(campo) then mask = mask or 2^i
    next
    session("mask") = mask

在每个需要的文件上

if can_user("read_article") then .... 

关于mysql - 从数据库中获取用户权限 - 概念问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6821490/

相关文章:

database - 您将如何设计数据库表来跟踪状态属性?

mysql - 使用 MSSM 将 MySQL 数据库传输到 SQL Express 2017

mysql 从表中删除100之后

Python 和 MySQL 连接器 : AttributeError: 'CMySQLCursor' object has no attribute 'next'

sql - 从 to_char() 输出中删除空白填充

php - 我的数据库模型(很糟糕)让人头疼,如何改进它?

mysql - 经典 ASP 网站的数据未正确写入 MySQL 5 数据库

asp-classic - 显示当前目录 - 经典 ASP

asp.net - 将 OpenIDConnect 集成到经典 ASP 应用程序中

mysql - 为 PostgreSQL 制作 ERD 的工具