设计思路
- 数据结构设计:使用哈希表(Hash)来存储角色、模块和操作权限之间的关系。这样可以将权限配置与判断逻辑分离,便于维护和扩展。
- 模块化设计:将权限判断逻辑封装成一个独立的方法,使得代码结构更清晰,易于理解和修改。
- 扩展性考虑:当有新的角色、模块或操作权限加入时,只需要在哈希表中添加相应的配置项,而不需要大幅修改判断逻辑代码。
核心实现代码
# 定义权限配置哈希表
permissions = {
'admin' => {
'article' => %w[create update delete view],
'comment' => %w[create update delete view],
'user' => %w[create update delete view]
},
'editor' => {
'article' => %w[create update view],
'comment' => %w[create update view],
'user' => []
},
'viewer' => {
'article' => %w[view],
'comment' => %w[view],
'user' => []
}
}
# 权限判断方法
def has_permission?(role, module_name, action, permissions)
permissions[role]&.[](module_name)&.include?(action) || false
end
# 示例使用
role = 'editor'
module_name = 'article'
action = 'update'
puts has_permission?(role, module_name, action, permissions)? "有 #{action} #{module_name} 的权限" : "没有 #{action} #{module_name} 的权限"