私の要件は、スーパー管理者/管理者/ゲストとして登録できなければならず、その後、スーパー管理者/管理者/ゲストとしてサンプルプロジェクトを作成する必要があります。 。ruby on railsの役割に基づいたユーザーリダイレクト
スーパー管理者は、作成、表示、編集、削除などのすべての権限を持っています。管理者は、編集、表示、ゲストなどの権限には作成アクセスのみを持たなければなりません。
しかし、私のアプリケーションでは、ゲストはプロジェクトリストの作成、更新、削除などのすべての権限も取得しています。
この問題を解決するには、私が使用し
宝石は、以下のとおりです。役割に基づいてリダイレクト用
gem 'devise'
gem 'cancancan', '~> 1.10'
gem 'rolify'
は工夫/登録/ new.html.erbである:
一度、新しいユーザーを作成します(ラジオボタンを選択することにより)データベースに値1(スーパー管理者用)/ 2(管理者)/ 3(ゲスト)を保存できました
アプリ/モデル/ ability.rb:
class Ability
include cancan::Ability
def initialize(user)
user ||= User.new
if user.has_role?(:super_admin)
can :manage, :all
elsif user.has_role?(:admin)
can :create, Project
can :update, Project do |project|
project.ongoing?
end
can :read, Project
elsif user.role?(:guest)
can :create, Project
end
end
end
アプリ/モデル/ role.rb:
class Role < ActiveRecord::Base
resourcify
has_and_belongs_to_many :users, :join_table => :users_roles
belongs_to :resource,
:polymorphic => true,
validates :resource_type,
:inclusion => { :in => Rolify.resource_types },
:allow_nil => true
scopify
end
アプリ/モデル/ users.rb:
class User < ActiveRecord::Base
rolify :role_cname => 'Usertype'
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
has_many :projects, dependent: :destroy
def super_admin?
has_role?(:super_admin)
end
def admin?
has_role?(:admin)
end
def guest?
has_role?(:guest)
end
end
Role.rb: クラスの役割
sowmya
私はこの上でいくつかのガイダンスを必要とする、私は5日以来、ここにstucked。 – sowmya
** ability.rb **では、 'user.role?(:guest)'を 'user.has_role?(:guest)'に変更します。 – Roshan