问题标签 [cancancan]

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.

0 投票
0 回答
243 浏览

ruby-on-rails - 在 Rails 中使用 CanCanCan 进行嵌套路由和授权

有以下路由:

能力:

控制器:

当我尝试创建新事务时,出现错误:

我究竟做错了什么?我该如何解决?提前致谢。

0 投票
1 回答
199 浏览

ruby-on-rails - CanCanCan:只允许管理用户个人资料

我有使用设备和 cancancan 的用户模型。这是我的能力:

其中 access_profile 别名是:

在我的 users_controller 中,我使用 load_and_authorize_resource。例如,当我尝试“users/4”和 current_user.id = 3 时,我能够到达那里。

在日志中我看到这个:

这里第一个查询来自 set_user 方法。我猜第二个查询会加载我的资源以进行授权。在这里,由于 current_user.id = 3 并且在第二个查询中我也看到了 3,我想这就是我被授权的原因。但我猜,第二个查询中的 id 必须是 4。

怎么做才能使 load_and_authorize 方法正常工作。

0 投票
1 回答
227 浏览

ruby-on-rails - Rails、Devise、Role Model 和 CanCanCan - 定义能力

我正在使用 Rails 4 制作一个网络应用程序。

我正在尝试使用 CanCanCan 来定义各种角色的能力。

我有一个用户模型和一个配置文件模型。每个用户可以有许多个人资料。每个配置文件可以具有不同的角色。

在我的 Profile.rb 中,我将我的角色(使用角色模型 gem)定义为:

在我的ability.rb中,我试图将第一个能力定义为:

在我的 Projects 表中,我有一个名为 :close 的布尔属性。

我也有 Sweep 和 Disclosure 的模型。这些协会是:

我的公开表有一个名为 :allusers 的布尔属性。

如果 Projects.close 为 false 并且 project.sweep.disclosure.allusers 为 true,那么我想让客人阅读该项目。

当我按照上面的说明尝试时,我收到一条错误消息:

它指的是我的项目显示视图中的一行,它说:

在尝试定义能力之前,这并没有导致错误。此外,项目索引中返回的几个项目是不符合我在能力.rb 中指定的标准的项目(例如,Disclosure.allusers 未设置为 true)。

谁能看到我在定义上述能力时做错了什么?

0 投票
3 回答
1530 浏览

ruby-on-rails - Rails - CanCanCan - 常用能力

我正在使用 Rails 4、设计、角色模型和 CanCanCan。

是否可以在ability.rb 中定义许多角色共有的能力?

例如,每个登录用户都可以 CRUD 自己的个人资料页面吗?然后角色在通用能力之上还有特定的能力?

这是如何运作的?我是否需要在角色模型中为通用能力创建一个角色,然后允许每个用户拥有多个角色,以便他们获得通用能力以及角色特定能力?

例如,在我的能力.rb 中,我有:

所以,我希望学生能够阅读客人可以阅读的相同内容。有没有办法说学生可以做新用户和登录用户可以做的所有事情(以及学生的特定能力)?

0 投票
0 回答
128 浏览

ruby-on-rails - Rails 4、设计、角色模型和 CanCanCan - 定义能力

我正在使用 Rails 4 制作一个网络应用程序。

我正在尝试使用 CanCanCan 来定义各种角色的能力。

我有一个用户模型和一个配置文件模型。每个用户可以有许多个人资料。每个配置文件可以具有不同的角色。

在我的 Profile.rb 中,我将我的角色(使用角色模型 gem)定义为:

在我的ability.rb中,我试图将第一个能力定义为:

在我的 Projects 表中,我有一个名为 :close 的布尔属性。

我也有 Sweep 和 Disclosure 的模型。这些协会是:

我的公开表有一个名为 :allusers 的布尔属性。

如果 Projects.close 为 false 并且 project.sweep.disclosure.allusers 为 true,那么我希望允许客人阅读该项目。

当我按照上面的说明尝试时,我收到一条错误消息:

在尝试定义能力之前,这并没有导致错误。此外,项目索引中返回的几个项目是不符合我在能力.rb 中指定的标准的项目(例如,Disclosure.allusers 未设置为 true)。

谁能看到我在定义上述能力时做错了什么?

这与我在具有相同标题的相关问题中提出的问题不同。

0 投票
1 回答
115 浏览

ruby-on-rails - CanCanCan - 定义能力和语法

我正在使用 Rails 4、Devise、Role Model 和 CanCanCan 来制作应用程序。

我正在尝试在我的ability.rb 中定义能力。

我正在尝试以下操作:

但是,我在上面的行中收到一个语法错误,上面写着:

我尝试将 => 替换为 :true ,但在这种情况下出现语法错误:

我还尝试将冒号放在属性的开头,在这种情况下我收到此错误:

我想不出更多的方法来尝试这个。

我试图测试的相关属性在一个名为 Disclosure.rb 的模型中。该模型属于一个名为 Sweep.rb 的模型。Sweep 属于一个名为 Project.rb 的模型。

我不知道如何定义能力,这些错误让我筋疲力尽。有谁知道如何使用 CanCanCan 来定义能力,如果是这样,请你看看我在定义决定这个用户是否可以看到这些项目的属性时做错了什么?

0 投票
1 回答
1127 浏览

ruby-on-rails - Rails 4:具有 has_many 的 CanCanCan 能力:通过关联

我有一个具有以下模型的 Rails 应用程序:

对于给定calendar的 , auser具有在连接模型role中定义的。administration

对于每个日历,用户只能具有以下三个角色之一OwnerEditorViewer

这些角色目前没有存储在字典或常量中,只是通过不同的方法作为字符串(“Ower”、“Editor”、“Viewer”)分配给管理部门。

模型上的身份验证User是通过 Devise 处理的,并且该current_user方法正在运行。

为了只允许登录用户访问应用内资源,我已经在和控制器中添加了该before_action :authenticate_user!方法。calendarsadministrations

现在,我需要实现一个基于角色的授权系统,所以我只是安装了CanCanCangem。

这是我想要实现的目标:

  • 所有(登录的)users 都可以创建新calendar的s。
  • 如果 auser是 a 的 the ownercalendar那么他可以managethecalendar和所有administration属于 this 的 s calendar,包括他自己的administration
  • 如果一个用户是editor一个calendar,那么他可以readupdate这个日历,并销毁他的administration.
  • 如果 auserviewera calendar,那么他可以readthiscalendardestroyhis administration

为了实现上述内容,我提出了以下ability.rb文件:

由于我对 Rails 的试验并不多,而且这是我第一次使用CanCanCan,所以我对我的代码不是很有信心,希望得到一些验证或改进建议。

那么,这段代码会起作用吗,它能让我实现我所需要的吗?

更新:使用当前代码,当我以用户身份登录并访问另一个用户日历的 calendars#show 页面时,我实际上可以访问日历,这是我不应该的。

所以,显然,我的代码不起作用。

知道我做错了什么吗?

更新 2:我认为我的代码中有错误,因为我使用:model而不是Model允许users 对给定的model.

但是,代码仍然无法正常工作。

知道这里可能有什么问题吗?

更新 3:问题可能是由于我if user.role?(:owner)用来检查用户的角色是否设置为所有者,而在数据库中角色实际上被定义为“所有者”(作为字符串)?

更新4:我继续做一些研究,我意识到我犯了两个错误。

  1. 我没有添加load_and_authorize_resourcecalendarsadministrations控制器。

  2. 我在我的方法中定义了两个属性和两个参数——<code>initialize(user, calendar)——而不是一个initialize

因此,更新了两个控制器,以及能力.rb 文件如下:

现在,当我尝试访问不属于 的日历时,current_user出现以下错误:

我该如何解决这个问题?

0 投票
1 回答
413 浏览

ruby-on-rails - Rails 设计角色模型和 CanCanCan - 定义能力

我正在尝试在 CanCanCan 中定义能力。

我无法弄清楚开始的语法。

我为我的角色使用角色模型,这些角色在我的 Profile.rb 中定义。Profile.rb 属于 User.rb。

我正在尝试检查用户是否具有角色:student。

当我尝试:

我收到一个语法错误,上面写着:

当我尝试:

我收到一个语法错误,上面写着:

我还尝试用常规括号替换花括号并将它们完全删除。

当我尝试删除设计部分(user_signed_in)并使用下面评论中的建议时,我尝试:

我得到这个错误:

当我尝试:

我收到此错误:

当我尝试:

我收到此错误:

我的 profile.rb 中定义了以下角色:

当我尝试:

我没有收到任何错误,但我对这种方法的问题是学生可以做很多事情(有 10 行权限,所以我需要将 if 语句单独添加到 10 个“can”语句中的每一个中,除非有一种方法可以在下一个“elsif”语句之前将 if 语句应用于所有行。

我的ability.rb的第一部分贴在下面(角色很多,能力也很多,所以我没有贴全)。

当我尝试时(下面的建议):

我收到此错误:

请问有人可以看到我做错了什么吗?

0 投票
1 回答
1030 浏览

ruby-on-rails - Rails 4 + CanCanCan:“未定义的方法‘角色?’ 为用户”

这是 Rails 4 的后续问题:CanCanCan 能力与 has_many :通过关联,我在这里重申问题,因为我相信上下文略有变化,在 4 次更新后,最初问题的代码也有很大不同。

我还检查了其他问题,例如未定义的方法“角色?” 对于 User,但它并没有解决我的问题。

所以,我们开始吧:我有三个模型:

对于给定calendar的 , auser具有role在连接模型中定义的administration(在名为 的列中role)。

对于每个calendar, auser只能具有以下三个roles 之一:所有者、编辑者或查看者。

这些角色目前没有存储在字典或常量中,只是administration通过不同的方法分配给一个 as 字符串(“Ower”、“Editor”、“Viewer”)。

User模型上的身份验证通过 处理Devise,并且该current_user方法有效。

为了只允许登录的user人访问应用内资源,我已经在和控制器中添加了before_action :authenticate_user!方法。calendarsadministrations

现在,我需要实现一个基于角色的授权系统,所以我只是安装了CanCanCangem。

这是我想要实现的目标:

  • 所有(登录的)users 都可以createnew calendars。
  • 如果 auser是 a 的 the ownercalendar那么他可以managethecalendar和所有administration属于 this 的 s calendar,包括他自己的administration
  • 如果 auser属于editora calendar,那么他可以readupdate这个calendar,和destroy他的administration
  • 如果 auserviewera calendar,那么他可以readthiscalendardestroyhis administration

为了实现上述内容,我提出了以下ability.rb文件:

现在,当登录并尝试访问任何日历页面(索引、显示、编辑)时,我收到以下错误:

我猜这个问题来自这样一个事实,即 auser本身没有 a role,而只有role一个给定的定义calendar

这就解释了为什么我得到一个NoMethodErrorfor role?on user

所以,问题是:如何检查user role给定的 a calendar

知道如何使事情正常进行吗?

0 投票
0 回答
201 浏览

ruby-on-rails - Rails 4、设计、角色模型和 CanCanCan

我试图弄清楚如何在我的 rails 4 应用程序中定义 cancancan 功能。

我使用设计进行身份验证。

当我尝试:

我收到一条错误消息:

我认为设计有一个名为 user_signed_in 的助手?

我根本不明白这个错误。谁能看到我做错了什么?