【发布时间】:2014-12-16 12:05:30
【问题描述】:
我已经针对此问题提供了不同的解决方案,但它们都不起作用,所以请不要尝试以重复的方式关闭问题。
我的用户表中有角色列。所以用户可以通过admin 或user,我需要使用CanCan 将权限放在用户角色的基础上。我想将所有权限授予管理员。我以管理员身份登录,但是当我访问/users 时,我收到错误uninitialized constant Ability,当我删除load_and_authorize_resource 时,我的cancan 权限不起作用。我的能力类看起来像
class Ability
include CanCan::Ability
def initialize(user)
#abort("Message goes here")
user ||= User.new # guest user
#abort('some user')
if user.role == 'admin'
can :manage, :all
elsif user.role == 'user'
can :manage, Micropost do |micropost|
micropost.try(:owner) == user
end
can :update, User do |users|
users.try(:owner) == user
end
else
can :read, :all
end
end
end
在我的UsersController 我有
class UsersController < ApplicationController
load_and_authorize_resource
#devise code
before_filter :authenticate_user!, only: [:index, :edit, :update, :destroy, :following, :followers]
blah blah
end
我的路线文件看起来像
FirstApp::Application.routes.draw do
devise_for :users
resources :users do
member do
get :following, :followers
end
end
#resources :sessions, only: [:new, :create, :destroy]
resources :microposts, only: [:create, :destroy]
resources :relationships, only: [:create, :destroy]
root to: "static_pages#home"
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'
end
【问题讨论】:
-
您的
ability.rb文件是否位于app/models目录下? -
也许这是显而易见的事情,但无论如何:尝试重新启动您的服务器和/或 spring。当您捆绑新的 gem 或添加新的初始化程序时,您通常必须重新启动您的乘客/独角兽/等(如果您使用它们)来更新自动加载的常量。
-
@sjaime 哦,对不起。我的错。它不在模型目录中。这就是原因。谢谢你。如果你能回答,我会接受。 :-)
标签: ruby-on-rails ruby devise cancan