我想知道我是否走在正确的轨道上,以及rails是否允许这种事情。
User
有Role
一个Network
。即“吉姆”是“学校”的“历史老师”。
ARole
既有位置(权力),也有名称(标签)。“Jim”是“历史老师”(标签),但具有成员或管理员、主管或其他任何(权力)的权限。
这取决于他/她是否创建了Role
它们。即,如果“Jim”是“校长”(管理员),“Jim”可以看到“Nancy's”的“Recess Plan”,但如果“Jim”是“历史老师”(成员)则不能。User
Events
Network
A在 a 中User
创建 aEvent
作为Role
a 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