【发布时间】:2017-03-24 10:44:24
【问题描述】:
Ruby 新手,正在为内部应用程序进行更改。
我正在使用 CanCan,以便我们可以限制对页面的访问。
我有以下有效的代码,但我知道有一种更好的方法可以为未知数量的子元素编写代码。
一个用户有一个直属经理,他有一个直属经理……等等。我正在尝试实现树形层次结构,以便顶级经理可以查看他们的员工帐户,但前提是他们是该员工层次结构的一部分。在下面的示例中,John 应该能够查看 Jane 和 Jack 的个人资料,但不能查看 Josh 或 James 的个人资料。
+-------------+----------------------+--------+
| user_id | name | parent |
+-------------+----------------------+--------+
| 1 | JOHN SMITH | NULL |
| 2 | JANE SMITH | 1 |
| 3 | JACK SMITH | 2 |
| 4 | JOSH SMITH | 5 |
| 5 | JAMES SMITH | NULL |
+-------------+----------------------+--------+
Ability.rb 的一部分
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
can :read, User, id: user.id
can :read, User, line_manager: user
can :read, User, line_manager: {line_manager: user}
can :read, User, line_manager: {line_manager: {line_manager: user}}
can :read, User, line_manager: {line_manager: {line_manager: {line_manager: user}}}
can :read, User, line_manager: {line_manager: {line_manager: {line_manager: {line_manager: user}}}}
can :read, User, line_manager: {line_manager: {line_manager: {line_manager: {line_manager: {line_manager: user}}}}}
感谢任何帮助,因为这不是一个长期的解决方案,因为巢的数量可能会扩大,并且需要在不仅仅是用户身上完成。
【问题讨论】:
-
您能发布您的用户和直线经理类定义吗?
标签: ruby-on-rails ruby nested cancan