MST

星途 面试题库

面试题:Ruby条件语句与逻辑控制专家级题

在一个复杂的Ruby项目中,有多个条件判断嵌套的场景,例如判断用户权限。用户具有不同的角色('admin', 'editor', 'viewer'),不同角色在不同模块('article', 'comment', 'user')下有不同的操作权限('create', 'update', 'delete', 'view')。请设计一个灵活且可维护的方式,使用Ruby的条件语句和逻辑控制来实现权限判断。要求考虑扩展性,当有新的角色或模块及操作权限加入时,代码修改量最小。请阐述你的设计思路并给出核心实现代码。
37.8万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

设计思路

  1. 数据结构设计:使用哈希表(Hash)来存储角色、模块和操作权限之间的关系。这样可以将权限配置与判断逻辑分离,便于维护和扩展。
  2. 模块化设计:将权限判断逻辑封装成一个独立的方法,使得代码结构更清晰,易于理解和修改。
  3. 扩展性考虑:当有新的角色、模块或操作权限加入时,只需要在哈希表中添加相应的配置项,而不需要大幅修改判断逻辑代码。

核心实现代码

# 定义权限配置哈希表
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} 的权限"