2013-03-14 76 views
0

我从头构建用户授权并一直在处理用户角色。我被困在权限部分,因为我不知道如何定义它。当我向控制器添加“before_filter:authorize”时,它会在所有页面上显示“未初始化的常量ApplicationController :: Permission”错误。如何为用户角色定义权限

我知道错误是从我application_controller.rb文件蒸:

def current_permission 
    @current_permission || Permission.new(current_user) 
    end 

    def authorize 
    if !current_permission.allow?(params[:controller], params[:action]) 
     redirect_to root_url, alert: "Not authorized." 
    end 

Permission.rb:

Class Permission < Struct.new(:user) 
    def allow?(controller, action) 
    if user.nil? 
    controller == "galleries" && action.in?(%w[index show]) 
    elsif user.admin? 
    true 
    else 
    controller == "galleries" && action != "destroy" 
    end 
    end 

我不知道的是如何在我的应用程序正确地定义权限这样我就不会收到那个错误。有没有人有任何想法?

+0

权限是一个ActiveRecord模型吗?还是一个简单的对象?你在哪里定义了它? – pierallard 2013-03-14 14:50:46

+0

我刚刚添加了我的permission.rb文件。 – pwz2000 2013-03-14 14:52:02

+0

是的,请参阅下面的答案。你**肯定**应该看看** [学者](https://github.com/elabs/pundit)** – deefour 2013-03-14 14:52:15

回答

1

Permission类有2个问题:

  1. Classclass以小写c
  2. 您缺少end关闭该课程。

我还必须指出的是,真的没有理由要推倒重来。许多人选择使用cancandeclarative_authorization做你想做的事情。

就我个人而言,我喜欢更轻巧的Pundit宝石,它似乎适合你想要完成的很好的事情。

+0

这没有奏效。我做了一个编辑,并在原始文章中包含了我的permission.rb文件。我有基本的授权需求,并被告知CanCan更多的是明确的偏好。我只有两个角色,减去客人/禁止。除此之外,它只是注册和管理员。我是Rails的新手,我宁愿看看它是如何工作的,而不是仅仅使用一些gem中的插件。我能够让CanCan在昨天工作,但我更喜欢从头开始编码,所以我可以了解更多。 – pwz2000 2013-03-14 14:55:44

+0

“permission.rb”位于何处?你可以在控制台没有麻烦的情况下运行'Permission.new(User.first)'吗? – deefour 2013-03-14 14:56:49

+0

它在应用程序/模型。在控制台中出现相同的错误。 – pwz2000 2013-03-14 14:57:22