我想知道我是否走在正确的轨道上,以及rails是否允许这种事情。
User有Role一个Network。即“吉姆”是“学校”的“历史老师”。
ARole既有位置(权力),也有名称(标签)。“Jim”是“历史老师”(标签),但具有成员或管理员、主管或其他任何(权力)的权限。
这取决于他/她是否创建了Role它们。即,如果“Jim”是“校长”(管理员),“Jim”可以看到“Nancy's”的“Recess Plan”,但如果“Jim”是“历史老师”(成员)则不能。UserEventsNetwork
A在 a 中User创建 aEvent作为Rolea Network。即“吉姆”在“学校”作为“历史老师”创建“课程计划”。
Event永远连接到那个特定的Network并且当前连接到那个Role。
Event如果 aUser替换了另一个User,我希望它能够持续存在Role,并且 newUser可以访问它Event。即“汤姆”代替“吉姆”成为“历史老师”,并且可以修改“课程计划”,因为他是“历史老师”。“Jim”无法再访问“课程计划”。
Event但是如果没有User附加到 a ,我也希望 a坚持下去Role。即“汤姆”被解雇并且当前没有替换,管理员仍然可以看到“课程计划”。
最后,如果它Role被删除,它Event仍然存在,因为它与Network没有Role.
模型如下,我正在使用 CanCan 进行授权,这些是我的问题:
- 一个角色可以缺少一个
User,还是我需要创建一些通用的“无”User或“每个人”User?并且可以Event缺少一个Role?(belongs_to 可以为空吗?) - 将 a连接
Event到 aRole和 a是好还是坏的设计Network?有一个更好的方法吗? - 如果一个
User可以根据他/她看到更多事件,Role他们是否有很多Events通过Network或他们的Role?我正在考虑Network,Ability.rb 会限制它。
用户.rb
class User < ActiveRecord::Base
has_many :roles
has_many :networks, :through => :roles
has_many :events, :through => :network
# I would use CanCan to determine the authorization of
# what network events they can see based on their role?
end
网络.rb
class Network < ActiveRecord::Base
has_many :roles
has_many :users, :through => :roles
has_many :events
# it shouldn't have this through roles right?
# because a role can be deleted
end
角色.rb
class Role < ActiveRecord::Base
belongs_to :user #CAN THIS BE NULL?
belongs_to :network
end
事件.rb
class Event < ActiveRecord::Base
belongs_to :role #Can this be null?
belongs to :network
# Does it belong to the network through the role,
# or can it belong on its own, in case the role is deleted?
# belongs_to :user, :through => :roles
# Is this necessary if I am using CanCan
# to determine if a User can reach the event?
end
能力.rb
if user
user.roles.each do |role|
can :manage, Event, :role_id => role.id
if role.position == "admin" || role.position == "manager"
can :manage, Event, :network_id => role.network_id
elseif role.position == "supervisor"
can :read, Event, :network_id => role.network_id
end
end
end