0

我目前正在构建一个包含 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 框架然后查询数据库以使用特定于用户的数据填充集线器。

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

4

1 回答 1

0

我觉得你过度设计了这个,并构建了一些你不需要它的东西

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

  1. 来宾用户,未登录,可以访问应用程序的某些部分
  2. 普通用户
  3. 管理普通用户权限的管理员用户。

如果他们不在此列表中,我很想知道您还需要哪些其他用户类型。

Devise wikipages 提供了有关如何创建来宾用户以及如何添加管理员角色的建议。最好从实现应用程序普通用户的功能开始,然后使用上述资源添加其他用户类型。

于 2012-10-09T14:03:50.533 回答