Tag: 康康舞

如何为访客用户正确配置Devise + Cancan

在Rails 3.2应用程序中,我使用的是Devise + CanCan。 该应用程序以前仅限制登录用户的访问权限。 我正在添加一个Guest用户/能力,可以阅读该网站的某些部分。 我无法理解设置它的“正确”方法,特别是before_filter :authenticate!组合before_filter :authenticate! 控制器中需要load_and_authorize_resource 。 在努力实现这一目标时,我已将能力等级降至最低。 #Ability.rb class Ability include CanCan::Ability def initialize(user_or_admin) user_or_admin ||= User.new can :manage, :all end end 在无模型/静态页面Home控制器中 #home_controller.rb class HomeController < ApplicationController load_and_authorize_resource def index …some stuff end end 和 #application_controller.rb class ApplicationController < ActionController::Base protect_from_forgery before_filter :authenticate! …more stuff end 通过此设置,未登录的用户将被重定向到Devise登录页面。 如果我删除before_filter :authenticate! […]

Cancan +设计rescue_from没有捕获exception

我正在实现Devise和Cancan用于用户身份validation和权限。 到目前为止,一切都很好,但我不能在不允许用户访问特定function时将用户重定向到登录页面。 我的测试是: feature ‘A signed in user’ do before(:each) do user = FactoryGirl.create(:user) visit “/login” fill_in “user_email”, :with => user.email fill_in “user_password”, :with => “ilovebananas” click_button “Sign in” end scenario ‘should not have access to admin dashboard’ do visit ‘/admin’ page.should have_content ‘Log in’ end end 我得到以下失败: Failures: 1) A signed in user should […]

Rspec控制器错误需要但是使用进行渲染

新的测试,我很难让一些控制器测试通过。 以下控制器测试将引发错误: expecting but rendering with 我在我的一个控制器规格中有以下内容: require ‘spec_helper’ describe NasController do render_views login_user describe “GET #nas” do it “populates an array of devices” do @location = FactoryGirl.create(:location) @location.users << @current_user @nas = FactoryGirl.create(:nas, location_id: @location.id ) get :index assigns(:nas).should eq([@nas]) end it "renders the :index view" do response.should render_template(:index) end end 在我的控制器宏中,我有这个: def login_user […]

如何与康康人分页?

我希望用cancan进行分页但是如何将它与诸如will_paginate之类的gem进行整合并不明显。 理想情况下,cancan的load_resource将委托给will_paginate并添加额外的条件。 例如在cancan中我已经声明了访客用户 can :read, Post, :published => true 这由load_resource自动处理。 但是,我想在所有这些结果中使用will_paginate页面。 有任何想法吗。 问候 布拉德

Rails:使用CanCan根据单个模型的实例定义多个角色?

我目前仍然坚持如何根据我们想要的每个条件来分离CanCan的角色。 在我们的应用程序中,有许多类别(如数学,英语,历史等),每个类别都有很多课程。 每个用户可以在每个类别上拥有许多不同的角色。 例如,John可以成为数学的“读者”,这意味着他可以阅读所有数学课程。 约翰也可以成为英语的“作家”,这意味着他可以阅读所有英语课程,创建英语类别的课程,只编辑/删除他在英语中创建的课程。 如果这些是John所拥有的唯一角色,他将无法在导航栏中看到类别历史记录,并且将无法访问历史记录中的课程。 这些是建立关系的方式: class User < ActiveRecord::Base has_many :roles def has_role?(role_sym) roles.any? { |r| r.level.underscore.to_sym == role_sym } end end class Category < ActiveRecord::Base has_many :roles has_many :courses end class Role < ActiveRecord::Base belongs_to :user belongs_to :category attr_accessible :level, :category_id, :user_id end 在model / ability.rb中我们有 class Ability include CanCan::Ability def initialize(user) […]

Devise / CanCanCan – 允许管理员创建新用户

我正在使用rails 4.0.2,设计和cancancan 。 我正在尝试允许管理员创建新用户。 管理员用户在users表中分配了一个布尔字段。 在ability.rb我有以下内容: can :manage, :all if user.admin? 根据这个问题的一些建议,我创建了一个名为AdminsController的新控制器,它看起来像这样: class AdminsController < Devise::RegistrationsController def create build_resource(sign_up_params) if resource.save redirect_to admin_editors_path else clean_up_passwords resource respond_with resource end end def new build_resource({}) end end 我也尝试过配置路由: devise_for :users, :skip => [:registrations] as :user do get ‘user/admin’ => ‘admins#new’ post ‘user/admin’ => ‘admins#create’ get ‘users/edit’ => […]

允许匿名/来宾用户“试用”function,而无需在Rails / Devise / CanCan应用程序中注册

我正在使用Devise和CanCan开发一个Rails 3应用程序。 该应用程序允许匿名(未注册)用户访问某些应用程序,并允许注册用户访问其他部分。 应用程序(瑜伽锻炼应用程序)的一个方面是用户可以通过将瑜伽姿势串联起来创建瑜伽序列,然后他们可以在video播放器中播放它们。 我目前已经为注册用户提供了所有function,但是现在希望允许匿名用户能够创建序列并播放它,但要“保存”它(即能够在任何后续会话中再次使用它) ,他们需要注册。 目前,这需要实际创建一个属于用户的Sequence模型实例(简化如下) class Sequence “OrderedAsanaSequence”, :order => ‘position ASC’, :dependent => :destroy has_many :asanas, :through => :ordered_asana_sequences belongs_to :user def status_must_be_private_if_user_nil errors.add(:status, “must be private is user is nil”) if user == nil and status != :private end end 但是,当然,匿名用户没有用户模型。 我有点在Hackces属于用户的东西,但它不是强制性的(user_id可以是nil,如上所示),并且通过CanCan保护编辑的能力: class Ability {snip} # A guest can play with […]

绕过标记为公共的特定记录的设计授权的最佳方法是什么

我正在使用Rails 3.2项目中的设计和cancan。 我有一个带有布尔标志public的事件模型。 如果事件被标记为public => true,那么我希望任何人登录或不能访问该记录 GET /events/:id 如果它被标记为public => false,那么一系列康康技能将决定授权和访问上述资源。 实现这一目标的最佳模式是什么?

Devise + CanCan只是阻止其他用户编辑对象

你如何阻止其他用户编辑一个对象,比如一个不属于他们自己的个人资料对象呢? 大多数在线示例都是具有多个用户角色的复合体,我无法使其工作,但必须简单: def initialize(user) can :update, Profile do |profile| profile.try(:user) == current_user end end 在我的ProfilesController#edit中 authorize! :update, @profile

管理员更改用户的批准状态 – Rails + Devise + Cancancan

我按照此链接找出如何让管理员批准新用户。 我的User模型上有一个approved属性,它是一个布尔值。 2个问题 – 1)当我以管理员身份登录并通过link_to “Edit”, edit_user_path(user)转到编辑用户时link_to “Edit”, edit_user_path(user)更改已批准的用户 – 该URL用于正确的用户,但更新操作会尝试更新当前的管理员用户。 2)我更希望覆盖所需的当前密码,所以我在Registrations控制器中放置一个方法来执行此操作,但是会出现此错误: 错误:用户的unknown attribute ‘current_password’ for User. 所以它不会覆盖current_password ,也不会更新正确的非管理员用户 – 我哪里错了? class Ability include CanCan::Ability def initialize(user) current_user ||= User.new # guest user (not logged in) if current_user.admin == true can :manage, :all else can :manage, User, id: user.id end end end 路线 Rails.application.routes.draw do […]