按用户角色设计注册编辑?

时间:2016-01-22 09:40:59

标签: ruby-on-rails devise cancan user-roles

我一直在解决如何按用户角色分离我的应用程序的问题。

我的目标是通过一次注册进行用户注册,并将其植根到特定的根目录以及具有不同设计帐户信息的特定布局。

  • 任何用户,无论角色是谁都可以通过用户名电子邮件,密码注册。但在注册后,如果角色需要,则需要输入其他帐户信息。

  • 常规用户示例只需要用户名密码电子邮件。

  • Vip需要名称地址用户名密码电子邮件。

到目前为止,我已在我的设计用户模型中设置了我的角色

ROLES w% [ regular vip1 vip]

我已经设置了一个单独的控制器,可以将当前用户按角色重定向到特定路径。

def index
    path = case current_user.role
      when 'regular
      edit_user_registration_path
else.... etc etc

我还覆盖了设计注册控制器,以便在注册时包含角色。

我的问题仍然是找到按用户角色分配布局的方法,并且还需要按角色分配额外的帐户信息。即使我找到了一种按角色重定向用户的方法。在注册到特定页面并按角色根用户后,找到重定向用户的方法会容易得多。

我还浏览了CanCanCan文档并理解了限制每个用户角色的不同功能的概念,例如一个用户能够创建帖子而另一个用户没有。这对于我计划构建的应用程序非常有价值,但是有什么能够解释如何为每个用户创建根和呈现不同的布局。

此外,我还可以采用不同的策略,这可能有助于按角色分隔用户,但仍然可以方便地进行一次常规登录和注册。最后但并非最不重要的是,我还计划在Twitter和Facebook这样的网站上添加一个点击登录,在处理用户角色时你会期待一个问题吗?

任何想法或建议都会有所帮助。再一次,我已经彻底阅读了cancancan并设计了我完全遗漏或完全混淆的东西。

任何帮助我都会非常感激。

1 个答案:

答案 0 :(得分:0)

有几种不同的方法可以解决这个问题。 在控制器内部,您可以指定要渲染的视图/布局。 例如:

if current_user.role == "vip"
  render layout: "vip"
elsif current_user.role == "regular"
  render layout: "regular"
end

但是,您可以使用一个仅显示依赖于用户角色的某些字段的视图,而不是制作一堆不同的布局和视图。

这看起来像这样(在HAML中):

-if current_user.role == "vip"
  =f.input :address
  =f.input :name
=f.input :email
=f.input :password

至于第三方OAuth的一键注册,我认为这不是一个大问题。当您的应用在有人通过Facebook或Twitter登录后收到回叫时,接收该回调的控制器可以处理分配不同的角色。

相关问题