gpt4 book ai didi

caching - Redis – 嵌套哈希与字符串值

转载 作者:IT王子 更新时间:2023-10-29 06:14:18 25 4
gpt4 key购买 nike

我需要使用 Redis 缓存访问权限。
访问权限是针对每个用户(应用程序的用户)、功能(用户可以执行的操作)和机器(用户可以执行该功能的机器)。

例如:
UserA,编辑名称,machine1
或者UserB,删除机器,machine40

该应用程序包含大约 1000 个功能、6000 台机器和 300 个用户。
我不确定存储访问权限的最佳想法是什么。

选项 1:将访问权限存储为单个字符串,如下所示:

redis> set userA_EditName_machine1 true
redis> set userA_EditName_machine2 false
redis> set userB_DeleteMachine_machine40 false

选项 2:将访问权限存储为嵌套哈希:

redis> hset users:userA:EditName machine1 true
redis> hset users:userA:EditName machine2 false
redis> hset users:userB:DeleteMachine machine40 false

我的应用程序是一个 ASP.Net MVC 应用程序,我正在使用 StackExcahnge.Redis 来处理 Redis。

一个选项是否比另一个选项有任何优势?

编辑:

应用程序需要检查是否允许用户在特定机器上执行特定操作。查询看起来像这样:

选项 1:

redis> get user0_function0_machine1

选项 2:

redis> hget users:user0:function0 machine1

最佳答案

您应该考虑将访问控制列表(附加到用户计算机的权限列表)存储为 redis 哈希。

通过这种方式,您可以查询一个主题的整个权限集合,或者只查询一个特定的对象权限。

例如,您有以下用户(主题):

  • 约翰:机器1
  • 约翰:机器2
  • 玛丽:机器1

以下特征(或对象):

  • 编辑姓名
  • 删除机器

以及以下权限:

  • Y(已授予访问权限)
  • N(拒绝访问)

您可以使用key -> field -> value 为每个主题创建一个散列,如下所示:

ACL:{username}:{machine} -> {object} -> {permission}

因此您可以像这样查询特定对象的权限:

redis> HGET ACL:john:machine2 editname
"Y"

或者查询一个主题的整个权限集合:

redis> HGETALL ACL:john:machine2
1) "editname"
2) "Y"
3) "deletemachine"
4) "N"

当然你也可以选择只存储授予的权限,默认假定拒绝的权限。

关于caching - Redis – 嵌套哈希与字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35945038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com