0

ユーザーがログインできるWebサイトに取り組んでいます。すべてのユーザーは 1 つのアカウントを持ち、1 つのアカウントは複数の注文を持つことができます。ユーザーは、クライアント、ワーカー、またはマネージャーの場合があります。クライアントは決して労働者でも管理者でもありません。マネージャーも労働者です。ログインしているユーザーのタイプに応じて、ページ/ナビゲーション オプションの追加セクションを提示したいと思います。

現在、一連のブール値を使用してユーザーを特定のタイプとしてマークし、その値をテストし、いくつかの if/elsif ブロックを実行して、ユーザーに表示されるページを生成しています。

class User
  include DataMapper::Resource
  # ...
  # various properties
  # ...
  property :client, Boolean
  property :worker, Boolean
  property :manager, Boolean
end

次に、前フィルターを使用してユーザーの種類をテストし、結果を変数として設定しています。

before do
  @user = session[:user]
  if @user.client?
    @ura = 'client'
  elsif @user.worker?
    @ura = 'worker'
  elseif @user.manager?
    @ura = 'manager'
  end
end

それから私の見解では、@ura で遊んでいます。@ura はワーカーとマネージャーの両方である必要があるため、これはすでにマネージャーに問題を引き起こしているように思えます。ビューで or を使用することもできますが、より良い解決策は、ユーザー タイプを Enum または Flag として設定することだと思います。しかし、自分のプロセスでそれを使用する方法がよくわかりません。

それぞれの長所/短所と、@ura で適切な値を得る方法の基本的な例を知りたいです。

4

2 に答える 2

0

よくわかりませんが、配列がより良い解決策になるかもしれません:

class User ....
   def getRoles
      roles = Array.new
      roles << "client" if self.client? 
      roles << "manager" if self.manager? 
      roles << "worker" if self.worker? 
      roles
   end
end

before do
  @user = session[:user]
  if(@user.getRoles.index("manager") != nil)
    ...
于 2011-10-03T05:46:40.643 に答える