Tag: 授权

如何限制当前登录的用户只能看到属于他们的产品?

如果用户使用特定角色( vendor )登录,则他们应该只看到他们在商店中创建的项目。 他们不应该看到其他供应商的产品。 所以我试图在我的授权中这样做(使用Devise,CanCan,Rolify)。 我试过这个: user ||= User.new # guest user (not logged in) if user.has_role? :vendor can :dashboard can :manage, [Product, Vendor], :vendor_id => user.id can :view, [Product], :vendor_id => user.id end 但是….没有太多运气……我错过了什么? 编辑1 我知道我可以限制控制器中的产品,如: @product = current_user.products 但这不是我想要的。 在这种情况下,供应商(即具有角色的用户:vendor )应该只能看到他们添加到商店的产品,但他们不应该能够看到其他供应商添加的产品。 但是,买方(即具有角色的用户:buyer )应该能够看到所有:buyer所有产品(管理员/等)。 买方将无法查看某些产品的价格和其他一些属性等。 我怎样才能实现这一切?

Rails:使用OmniAuth(FB授权),从Facebook Hash读取数据

使用OmniAuth,我成功从Facebook获取哈希数据:存储在“auth”中 # extra=#] last_name=”Jordan” link=”http://www.facebook.com/michael” locale=”en_US” middle_name=”Ball” name=”Michael Jordan” quotes=”\”lalala\”\n\n\”lala\”” timezone=9 updated_time=”2011-09-01T20:25:58+0000″ username=”mjordan82″ verified=true>> info=# verified=true> provider=”facebook” uid=”123456879″> 在用户模型中,我执行如下操作: def self.create_with_omniauth(auth) create! do |user| user.provider = auth[“provider”] user.uid = auth[“uid”] user.name = auth[“name”] end end 当我检查数据库时,我只有提供者和uid。 User.name行为空。 从测试中,我发现我无法存储除提供者和uid之外的其他数据。 例如,user.name = auth [“provider”]或user.name = auth [“uid”]存储没有问题,但是当我尝试类似user.name = auth [“timezone”]或user.name =时auth [“last_name”],没有任何内容存储在变量中。 有人知道怎么修这个东西吗? 我也试过user.name = auth [“user_info”] […]

Parano和CanCanCan之间的Rails 5兼容性受损?

我遇到与此主题中描述的完全相同的问题: Rails 5 only_deleted with cancancan#356 我可以访问已删除的记录,如下所示: @area = Area.only_deleted.find(params[:id]) 但如果我将load_and_authorize_resource添加到我的控制器,它将尝试运行这样的查询: @area = Area.find(params[:id]) 这将导致错误,因为它不会在lost_at不为null的集合中找到具有该id的记录(未删除记录,Paranoia gem的目的)。 如果我为控制器禁用load_and_authorize_resource或执行该操作,它会解决错误,但它不是解决方案,因为这意味着失去授权控制。 有没有解决这个问题,或者是否有一个授权gem与Rails 5上的Paranoia很好用,我可以切换到? 谢谢。

具有相同角色的用户如何访问具有不同权限的不同post?

我使用设计进行身份validation,并为每个用户分配了一个角色。 我还有一个模型posts ,其中包含多个post。 我想限制角色employee一个用户查看特定post和同一个用户来查看和创建不同的post。 我怎样才能做到这一点?

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) […]

保护REST和JSON

我想使用RESTful架构构建我的Web服务来提供JSON数据。 但我只想要我自己的客户端应用程序可以从我的Web服务请求。 基本上,我的Web服务包含非公共消费的敏感数据,但我想以这种方式构建它,以便我可以构建许多连接到我的Web服务的不同客户端应用程序。 非常感谢任何想法,谢谢。

未定义的方法`admin?’ 为零:NilClass

我跟着railscast#250来自Scratch的身份validation并且得到了很好的工作。 现在我只想在我的索引页面上显示编辑和销毁链接给admin用户。 我已经设置了mu用户数据库,其中包含一个admin boolean字段,并尝试在另一个模型(hikingtrails)的视图中放置一个简单的if语句,只显示管理员用户的某些链接,但是当我尝试它时,我得到了这个错误, undefined method ‘admin?’ for nil:NilClass undefined method ‘admin?’ for nil:NilClass 数据库架构 create_table “users”, :force => true do |t| t.string “email” t.string “password_digest” t.boolean “admin” t.datetime “created_at”, :null => false t.datetime “updated_at”, :null => false end 用户模型 class User true has_secure_password end 应用控制器 class ApplicationController < ActionController::Base protect_from_forgery # fetch the currently […]

Rails 3公司帐户与许多用户,限制访问数据

我想知道在我的应用程序中构建身份validation/授权的最佳方法。 我希望有 许多公司帐户,可能使用子域名 帐户有很多用户 并且用户只能访问由他们自己或具有相同帐户的其他用户创建的记录。 我已经完成的研究提供了很多混合设计,用于以奇怪和奇妙的方式组合设计/ cancan / authlogic,但我还没有找到任何能够向我展示限制用户访问数据的最佳方法模型。 例如: 帐户1:欧亚大陆 用户1:鲍勃 用户2:吉姆 帐户2:Eastasia 用户1:戴夫 用户2:艾伦 Isbn 1:account_id是1 Isbn 2:account_id是2 我如何确保Bob无法访问或破坏Isbn 2? ///更新当然,现在我发布了这个,我的google fu已经开始了,我已经从RyanB找到了CanCan 2.0的自述文件,看起来很完美: >资源 如果您需要根据模型的属性更改授权,该怎么办? 您可以通过将条件的哈希值作为最后一个参数传递给can来实现。 例如,如果您只想允许一个人访问他拥有的项目,您可以设置:user_id选项。

Rails动态基于角色的授权插件?

有很多基于角色的授权插件。 当你事先知道角色将会是什么时,它们会很有效。 例如,如果我知道我将拥有管理员,super_users和not_so_super_users。 我真正想要的是能够创建自定义角色并将该角色分配给用户。 此时,我只想根据用户的自定义角色阻止对控制器/操作的访问。 角色将包含权限。 例如,Jane Doe可以添加和查看小部件,但她无法删除或编辑它们。 John Doe可以添加,查看和编辑。 老板可以添加,查看,编辑和删除。 我希望能够检查用户是否有权在一行中访问控制器/操作: user.is_authorized? is_authorized(或其所谓的任何内容)应足够智能,以确定用户是否根据其分配的角色和该角色的权限集进行授权。 我有道理吗? 那有什么可以做到的吗?

如何在枚举字段中使用CanCanCan?

我得到了枚举字段enum status: [:pending, :done] 文章模型enum status: [:pending, :done] 。 这是我的能力档案 class Ability include CanCan::Ability def initialize(user) user ||= User.new if user.member? can :read, Article.done end end end 在视图中我试图为成员渲染Article.done集合但不是渲染渲染。 因此我有一个问题:在CanCanCan中有没有可能使用enum的方法?