【发布时间】:2015-01-04 04:44:42
【问题描述】:
我想要 3 个用户组:管理员、经理和工程师。管理员可以查看所有对象,可以更改用户所属的组等等。经理可以看到他的东西和他的工程师的东西。工程师只能看到他自己的东西。问题是在哪里放置所有逻辑:在视图中、控制器中或模型中。我将创建一个会话助手“current_user_right_on(stuff)”并检查视图中的权限:
if current_user_right_on(stuff) == view
show_stuff
if current_user_right_on(stuff) == change
show_edit_controls
end
end
做这些事情的常用方法是什么?经验法则是什么?
更新 所以,现在我在控制器中
def index
if logged_in?
if current_user.admin?
@stuff = Stuff.all
else
@stuff = Stuff.stuff_user_can_see(current_user)
end
else
@stuff = Stuff.where( <anyone can see> )
end
end
在模型中我有方法“stuff_user_can_see(user)”,它从数据库中选择适当的记录。
我应该在这里改进什么?
【问题讨论】:
-
这对于Software Engineering 来说可能是一个更好的问题。 (不过,IMO 将在模型和控制器之间进行选择。视图不应参与此类决策。)
-
cHao 和 Cba Bhusal,请看一下我的新代码,我已将其添加到上面的原始帖子中。
标签: ruby-on-rails access-rights