问题标签 [cancan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - CanCan、InheritedResources 和 STI
如何同时使用 cancan、inherited_resources 和单表继承?我有类似这个例子的代码:
当我以用户身份尝试创建人时,我得到 CanCan::AccessDenied。那是因为 InheritedResources 使用 Contact 作为 :resource_class。
ruby-on-rails - Cancan access_by
当我这样做时到底发生了什么:
似乎发生的事情是我得到 course_enrollments where course.client_id = user.client.id
,我只是不明白它是如何accessible_by
工作的。
ruby-on-rails - 允许匿名/访客用户“试用”功能而无需在 Rails/Devise/CanCan 应用程序中注册
我正在使用 Devise 和 CanCan 开发 Rails 3 应用程序。
该应用程序允许匿名(未注册)用户访问该应用程序的某些部分,并允许注册用户访问其他部分。
该应用程序(一个瑜伽锻炼应用程序)的一个方面是用户可以通过将瑜伽姿势串在一起来创建瑜伽序列,然后他们可以在视频播放器中播放它们。
我目前拥有注册用户的所有功能,但现在希望允许匿名用户能够创建一个序列并播放它,但要“保存”它(即能够在任何后续会话中再次使用它) ,他们需要注册。
目前,这需要实际创建一个序列模型实例,它属于一个用户(下面简化)
但是,当然,匿名用户没有用户模型。
我已经破解了序列确实属于用户的一些东西,但它不是强制性的(user_id 可以是 nil,如上所示),并且编辑能力通过 CanCan 得到保护:
但是,这意味着任何匿名用户(user_id = nil)都可以编辑任何其他匿名用户的序列。我想这不是世界末日,但是,我希望它更安全。
以下是我想到的潜在方法:
“注册”匿名用户
- 如果来宾用户去制作序列,则生成电子邮件和密码并“注册”这个“来宾”用户。然后将新的序列模型分配给这个新用户。如果用户决定进行真实注册,只需使用新的电子邮件和密码更新现有用户记录。
- 优点:对现有应用的改动很少——只需要在“注册”过程中处理即可。
- 缺点:最终可能会导致我需要清理大量死用户帐户
不要持久化序列,而是将其序列化并存储在会话中
- 如果来宾用户去制作一个序列,当他们想要“保存”它时,将它发送到一个控制器方法,该方法序列化模型并将其存储在会话中。然后,序列播放器,我猜,序列编辑器可以选择从会话而不是数据存储中提取它
- 优点:无需为客人创建用户帐户,因此无需清理。无需处理修改 Abilities,因为来宾不会从 Datastore 中获取模型,而是从他们的会话中获取模型。
- 缺点:看起来很hacky。将需要应用程序中的大量接触点来确定从何处获取序列。更高的错误可能性
找出将序列分配给来宾用户的其他方法,而不是将 user_id 设为 nil
- 优点:会很精彩
- 缺点:不知道该怎么做。
我希望有一些我在 Devise 中没有看到的东西(也许是邀请的?),然后我自己滚动它会更干净。
或者,有人对这个问题有什么建议吗?这似乎是一个相对普遍的要求,但无法挖掘出任何指导。
谢谢!
ruby-on-rails - 继承资源和 CanCan 3 级嵌套
我对 CanCan 中模型的 3 层嵌套和继承资源有疑问。我读过我们应该将所有内容嵌套到 2 个级别,但我必须将所有内容都放在account
模型下,现在我尝试在 CanCan 中这样做:
这给了我一个值为@project 的@account 变量,就像它正在覆盖它一样。@project 是应该的,@model 也是。是我的错,CanCan 的,继承的资源还是 CanCan 不支持 3 级嵌套?另外,我在 IR 中为 ModelsController 执行此操作。
另一个奇怪的事情是当我load_and_
从 CanCan 的定义中删除部分时。然后它可以工作,但我读过不使用该load
部件可能很危险。
我可以只authorize_resource
使用 CanCan 还是应该使用 CanCan?
ruby-on-rails - 有什么方法可以订购 Cancan access_by 调用的结果
我正在使用 Cancanaccessible_by
来检索 ActiveRecord::Relation 结果(下面的示例代码)。有没有办法在accessible_by
通话期间订购结果?
更新:Srdjan 是正确的。@attributes
已经使用accessible_by
. 我更新了示例以显示按用户登录的排序。Attribute
与 有belongs_to
关系User
。
ruby-on-rails - CanCan 复杂能力定义
我有一个任务对象。
任务属于用户或公司。
一个用户可以通过雇佣关系属于许多公司(如区域经理)。
有没有一种方法可以让我与 cancan 进行检查以查看任务是属于用户还是属于他们所属的公司之一?
IE
ruby-on-rails - 如何使用 cancan 对资源数组进行授权?
我有一个我正在尝试使用 cancan 授权的 non-restful 控制器!应用权限的方法。
我有一个这样开始的 delete_multiple 动作
我想在继续之前检查用户是否有权删除所有这些发票。如果我使用
许可被拒绝。我的能力.rb 包括以下内容
是循环遍历我的数组并单独调用授权的问题,还是有更聪明的做事方式?我开始觉得手动进行授权比将 cancan 用于复杂的 non-restful 控制器更容易(尽管我的应用程序中有很多其他的 restful 控制器,它们都很好用)。
ruby-on-rails-3 - Rails 3 中的授权依赖于变量(不仅是用户和当前资源)
我使用过 cancan 并且我知道声明式授权,但似乎它们并没有让角色有机会依赖自定义变量。
楷模:
域(blah.qwe.com、wer.qwe.com、ert.qwe.com)- 我需要它们在一个数据库和应用程序中。
用户(可以有多个角色)
角色(每个角色只在其领域内有效;能力是可编辑的)
...
例如,我有一个用户,他是 blah.qwe.com 域的所有者,但他是 wer.qwe.ru 和 ert.qwe.com 的简单用户,他被禁止了,什么也做不了。
@current_domain 被加载到应用程序控制器的 before_filter 中(通过 current_domain 方法),而 current_user 被 devise 加载。使授权依赖于当前请求的资源(如在 cancan 中)、current_user 和 current_domain(可能还有其他 before_filter 加载的变量)的解决方案是什么?cancan 中是否有解决方案,或者我应该修改它或编写自己的自定义授权系统?
cancan - 大礼包自定义角色权限
我正在尝试在特定权限内提供一些自定义角色。在任何地方都找不到这个答案
角色能力.rb
我认为这可能是一个流行的想法,让具有“经理”角色的用户仅管理产品和其他某些模型......
如果我改变
到
它按预期工作......我可以访问所有管理区域
我只希望“零售商”能够:管理产品!;)
“admin”只是一个与用户关联的角色,即所有角色都是用户。
您可能会看到它的发展方向,零售商可以注册并销售他们自己的商品......这就是目标。
任何指针?
ruby-on-rails - CanCan 嵌套资源控制器授权
在我的应用程序中,允许用户指定另一个用户作为他们的“客户经理”,并且允许客户经理修改所有用户信息。我定义了以下能力:
用户也有一些嵌套资源(例如:出版物)。我定义了以下能力:
在视图中,我使用以下内容进行检查:
can? :update, @publication, @user_we_are_accessing
can? :create, Publication.new, @user_we_are_accessing
.
到目前为止一切正常。我的问题是控制器。在我的 PublicationsController 中,我添加了:
load_and_authorize_resource :user
load_and_authorize_resource :publication, :through => :user
然而,这总是抛出 AccessDenied,因为发布检查没有将用户对象传递给能力(试图检查能力中的用户对象显示为零)。
有什么想法可以实施吗?
tl;dr:使用 CanCan 授权对资源的访问。用户可以指定另一个用户作为客户经理。用户有嵌套资源。问题:客户经理无法访问嵌套资源。