【问题标题】:Controlled access and routing受控访问和路由
【发布时间】:2010-07-09 08:06:46
【问题描述】:

我有一个 Rails 应用程序,我想以受控方式管理对应用程序的访问。 客户端用户只能访问应用程序中的某些视图,而管理员可以访问任何页面。 将来,我可能还会添加一些半管理员,他们可能有权访问管理员访问的页面子集。 我已经有登录身份验证,但我想要一个更好的解决方案来控制用户对我的应用程序中某些页面的访问。

【问题讨论】:

  • @Mark - 我知道如何使用 before_login 和使用基本登录身份验证。我想做的是:假设我有一个买家、客户和供应商模型。我的管理员可以通过脚手架创建的视图看到所有模型的更改。我的半管理员只能访问客户模型。我的客户用户只能看到他的用户模型和我向他展示的数据。

标签: ruby-on-rails routing


【解决方案1】:

您似乎已经掌握了身份验证的基础知识,但只需要基于角色的授权解决方案。您可能想看看CanCan,它适用于大多数身份验证包。有一个很好的railscast关于如何使用它。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用before_filter

    users_controller.rb

      class UsersController < ApplicationController
        before_filter :login_required, :except=>[:show]
        before_filter :required_admin, :only=>[:all_users]
    
        def show
    
        end
    
        def all_users
    
        end
    
        def edit
    
        end
    
      end
    

    application_controller.rb

      class ApplicationController < ActionController::Base
    
        def current_user
           session[:user]
        end
    
        def login_required
          if current_user
            return true
          else
            flash[:notice]='Please login to continue.'
            redirect_to :controller => "logins"
          end
        end
    
        def required_admin
          if current_user && current_user.is_admin?  #check here if current user is admin or not
            return true
          else
            flash[:notice]='Please login as admin.'
            redirect_to :controller => "logins"
          end
        end
      end
    
    1. 显示方法可以看到任何有和没有登录的人

    2. 只有管理员才能看到 all_users 方法

    3. edit 方法可以看到任何登录用户(即用户admin)

    【讨论】:

    • 这个我已经完成了。我想要的是说我有一个买家、客户和供应商模型。我的管理员可以通过脚手架创建的视图看到所有模型的更改。我的半管理员只能访问客户模型。我的客户用户只能看到他的用户模型和我向他展示的数据。
    • 视图与模型不是一对一的,所以这取决于你如何展示你的应用程序。如果你愿意,你可以有一个 show 视图,其中有一个条件分支,根据查看它的人重定向到 show_adminshow_user
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多