我需要使用Redis缓存访问权限 访问权限是每个用户(应用程序的用户),功能(用户可以做的事情)和机器(用户可以执行该功能的机器)。
例如:
UserA,编辑名称,机器1
或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
答案 0 :(得分:1)
您应该考虑将访问控制列表(附加到用户计算机的权限列表)存储为redis哈希。
这样,您可以查询主题的整个权限集,或只查询特定对象权限。
例如,您有以下用户(主题):
以下功能(或对象):
以下权限:
您可以使用键 - >>为每个主题创建一个哈希值字段 - >值如下:
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"
当然,您可以选择仅存储已授予的权限,并默认采用拒绝权限。