2017-08-22 40 views
0

我的要求是,我必须能够注册为超级管理员/管理员/访客,之后,我必须创建一个示例项目作为超级管理员/管理员/访客。基于在rails上的角色的用户重定向

超级管理员拥有创建,查看,编辑,删除等所有权限。管理员拥有编辑,查看和访客权限等权限,只能创建访问权限。

但是,在我的应用程序中,Guest还获得了项目列表上创建,更新,删除等所有权限。

要解决此问题,

我使用的宝石:

gem 'devise' 

gem 'cancancan', '~> 1.10' 

gem 'rolify' 

基于角色重定向是色器件/注册/ new.html.erb:

有一次,我创建了一个新用户,(通过选择单选按钮)我能够将其值1(对于超级管理员)/ 2(Admin)/ 3(Guest)保存到数据库中

应用程序/模型/ 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 
+0

Role.rb: class Role sowmya

+0

我需要这方面的一些指导,我从这里开始工作5天。 – sowmya

+0

在** ability.rb **中,将'user.role?(:guest)'更改为'user.has_role?(:guest)'。 – Roshan

回答

0

对于您最后一次发言中的首发者,您打电话给:

elsif user.role?(:guest) 

而在其他您所呼叫

elsif user.has_role? 

有任何疑问,下面提问。因为我还没有评论。

+0

我已经将user.role?(:guest)更改为user.has_role?(:guest)....仍然没有区别.. :( – sowmya

+0

看起来好像您的角色没有正确设置,因为CanCanCan会假设if您无权访问模型,在您的实例Project中,它可能会将该模型的访问权限设置为(不能:管理项目)。您可以发布应用程序控制器的代码吗? –

+0

class ApplicationController sowmya