【问题标题】:Mysql storing webs ite admin permissionsMysql存储网站管理员权限
【发布时间】:2010-09-03 03:06:12
【问题描述】:

我有一个使用 C# 和 MySQL 的项目。我需要存储管理员门户设置的权限。当前有 6 种主要权限(读取、写入、查看、更新创建...),但这些权限中的每一个都可以应用于 n 个实体。因此用户可以创建、读取站点 a、d、f,但无权访问其他 100 多个站点。我想使用与每个站点一起添加的位:所以 perm 表会有 烫发表 用户名 int(11) perm int(4)
网站id int() 并且数据将是 userid = 10, perm=5 siteid=6; userid=10, perm=5, siteid=212 ...

开发人员希望我们将 xml 存储到数据库中,以便它看起来像: 一个 1 1 类似于上面的东西。我需要帮助,大多数人会做什么?这对性能更好,我们有一个需要非常快的站点。大多数保存都会检查权限结构。提前感谢您的帮助。

【问题讨论】:

    标签: c# mysql asp.net-mvc-2


    【解决方案1】:

    不要将位打包到字段中。这使得它无法搜索,并且您无法在位上创建索引来加速搜索。此外,将 XML 粘贴到数据库中是没有意义的 - 最好将信息存储在列中。我将创建一个表,为每个权限条目列出站点 ID、用户 ID 和权限值。然后,您可以查询该用户和站点组合是否存在该值。如果索引正确,查询会非常快。

    所以,一行可能看起来像

    id site_id user_id permission_id
    1    1       1        1 (read)
    2    1       1        2 (write)
    

    然后你像这样查询它

    select id from permissions where site_id = X and user_id = X and permission_id = X
    

    如果它返回 id > 0,它就在那里。

    【讨论】:

    • 您也可以为每个单独的权限创建一个列,并在其中存储 1 或 0。然后查询该用户/站点组合的值是否为 1。
    【解决方案2】:

    坦率地说,您也可以只使用用户 ID、站点 ID、读取、写入、查看、更新、创建为布尔值并索引所有列。我认为这会比有一个带有整数的单列更容易混淆......

    至于性能。如果有用户会话,只需将他们的凭据存储到他们的会话中,而不是不断地查询数据库。我对 C# 及其技术不太熟悉,因为我是 LAMP 人,但在查询缓存选项和会话处理程序之间,我怀疑速度是否会成为问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多