Rails应用程序设计,依赖于用户的路由和内容

时间:2012-10-09 08:06:43

标签: ruby-on-rails-3 devise

我目前正在构建一个包含3种用户类型的rails应用程序。这是我第一次使用Web开发,我想避免做出关键的设计错误,以后会花掉我的钱。希望更有经验的rails用户和Web开发人员能够指导我朝着正确的方向前进。

我想使用Devise作为我的主要身份验证系统,我目前正在计划这样的事情,以便在Devise框架中支持3种用户类型:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me

  belongs_to :rolable, :polymorphic => true
end

对于三种用户类型中的每一种:

# usertype1.rb
class UserType1 < ActiveRecord::Base
  has_one :user, :as => :rolable
end

# usertype2.rb
class UserType2 < ActiveRecord::Base
  has_one :user, :as => :rolable
end

实质上,用户类和几种不同的用户类型之间存在多态关联。我希望这种方法最终允许我在用户类型模型(例如has-many)中添加不同的关联关键字,以便于查询数据库。

我还关心如何实现依赖于用户的路由。这个想法是每个用户类型在登录时会看到一个单独的“集线器”,有不同的仪表板,不同的操作等等。我想我会通过覆盖Devise SessionsController来解决这个问题。像这样:

class SessionsController < ApplicationController
    def new
    end

    def create
      user = User.find_by_email(params[:email])
      if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        if user.type == 1
            redirect_to hub_typeone
        else if user.type == 2
            redirect_to hub_typetwo
        else
            redirect_to hub_typethree
      else
        flash.now.alert = "Email or password is invalid"
        render "new"
      end
    end

    def destroy
      session[:user_id] = nil
      redirect_to root_url, notice: "Logged out!"
    end
end

这个想法是,在成功验证后,用户将根据用户类型路由到不同的页面。我打算使用设计current_user框架然后查询数据库以使用特定于用户的数据填充集线器。

你们有什么指针吗?你看到我的计划/推理/方法有任何巨大的缺陷吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

我觉得你过度设计了这个,并构建了一些You Aren't Gonna Need It

最好是清楚三种不同的用户类型是什么。大多数应用程序需要以下三种用户类型:

  1. 未登录且可以访问应用程序某些部分的访客用户
  2. 普通用户
  3. 管理常规用户权限的管理员用户。
  4. 我很想知道如果他们不在此列表中,您需要哪些其他用户类型。

    设计wikipages有关于如何create a guest userhow to add an admin role的建议。可能最好从实现应用程序的常规用户的功能开始,然后使用上面提到的资源添加其他用户类型。