没用现成的插件,设计了 user,group,role,action 几张表,用于控制用户的分组、角色,操作等权限组合。比较传统的方法,在程序中考虑这样实现,check(用户 ID,操作名称 (中文名)),在前台代码中出现中文,似乎不是个好主意,而且需要在每个控制器和方法中写入代码。如何用 rails 的逻辑去实现,求给个新思路?
不是有 cancan 吗??
没用过 cancan,我是这么做的,把 action 作为权限控制的最小单位。
permission 模型,表中的每一条记录对应一个权限,字段有权限名称和权限的描述。has_many permission_actions
permission_action 模型,belongs_to permission,唯一一个字段是记录 action,格式 (namespace/controller#action)。
将权限关联到 group,这样可以通过 current_user 验证是否有访问每个 action 的权限。
def is_allow_action?(action) group.permissions.include?(Permission.find_by_action(action)) end
我觉得 before_filter 就很好了,各个地方的逻辑不同,规则放的位置离得远不好理解。
#2 楼 @chareice cancan 应该也是用 before_filter 和 action 的白名单来实现权限控制的吧。好像最小单位也是 action 吧。
如果比較複雜邏輯的權限,推薦用
gem 'declarative_authorization'
用 cancan 吧,重复造轮子,何必呢。
rbac 真没啥好的,cancan 其实也不是很爽
cancan 不是很好么
cancan
cancan + rolify