问题标签 [casl]

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 投票
1 回答
107 浏览

node.js - 一起使用 @casl/mongoose 和 mongoose-paginate-v2

我正在尝试在我的应用程序中使用@casl/mongoose 和 mongoose - paginate-v2express.js,但问题是必须在model对象上使用两个库。

在这两种方式中,我都得到了accessibleBy/paginate不是一个函数,因为正如我所说的,两个库都必须在模型(在我的情况下Person)对象上使用。

非常感谢任何帮助或建议。

0 投票
0 回答
159 浏览

reactjs - 具有 React Casl 权限和后端 api laravel spatie 权限的前端

我是新手,我正在使用一个身份验证示例,该示例使用 casl/ability 控制用户权限。在示例中,展示了 JWT 中的身份验证,它读取以下 JSON 结构:

我在 Laravel 中创建 bakcend,但 API 身份验证返回如下:

如何让我的 API 已经返回简化身份验证,将“权限”更改为“能力”并包含必要的字段。注意:我在 Laravel 中使用 spatie/permissions

0 投票
1 回答
194 浏览

mongoose - NestJS + CASL + Mongoose:CASL 无法从 Mongoose Schema 推断主题类型

语境

我已经Cat使用 Mongoose 和 NestJS 定义了一个模式:

我还定义了一个使用 CASL 处理我的 API 授权的能力工厂:

问题

当我尝试检查我的服务中的权限时(注意:用户不是管理员):

ability.can(Action.Update, cat)总是返回false,而它应该是true

附加信息

ability.canfalse当用户不是管理员时返回任何操作。

我的猜测是 CASL 无法使用能力构建器接口中的Cat类来推断我的 Mongoose 模型的主题类型。InferSubject但我不知道使用哪个类来正确推断主题类型。

我错过了什么?

0 投票
1 回答
324 浏览

javascript - React 应用程序“可以”条件中的 CASL 授权无效

我正在尝试在反应应用程序中实现 CASL 授权,我认为我对如何实现它不太了解。

标准的 Can 组件似乎可以与基本的 CRUD 操作一起使用,但我无法获得产生任何效果的条件。我想我错过了一些东西。

我目前的理论是我需要使用 TypeScript 而不是普通的 Javascript 才能使整个工作正常进行。我目前不知道任何 TypeScript,我真的很想推进我的应用程序,而不必学习另一种语言。如果必须的话,我会学习 TypeScript,但我需要知道它是否值得去做。以下是我迄今为止构建的内容的简化版本。

代码沙箱示例

预期行为 我希望应用程序显示此人可以阅读和创建事物记录。他们还应该能够更新或删除特定的 Apple 记录。

预期输出:
我可以查看事物
我可以创建事物
我可以更新这个苹果
我可以删除这个苹果

实际行为 它忽略与条件有关的任何内容,并允许对所有内容进行创建、读取、更新和删除。

实际输出:
我可以查看事物
我可以创建事物
我可以更新任何事物
我可以删除任何事物

主应用

能力上下文组件 用于构建能力上下文并封装能力的生成

Can组件在这里生成

最后一个组件可能会使用对“事物”的授权

0 投票
1 回答
61 浏览

javascript - 如果主题没有规则,则 CASL 行为

如果在CASL中未为给定主题提供任何规则,则检查该主题的能力始终返回 false。

例如

是否有可能改变这种行为,使true没有任何规则的对象恢复能力?

在我的用例中,我有大量的主题,并且可以动态添加新主题。{ action: "manage", subject: "NewSubject"}每当添加新主题时,总是必须添加是很困难的。我宁愿只为实际受到限制的主题添加规则。

0 投票
0 回答
51 浏览

javascript - Casl Prisma 可以用 vanilla Javascript 编写还是需要 Typescript?

CASL 文档中,它指出......

CASL 对 TypeScript 有完善的支持

打字稿片段

但是你可以使用纯 Javascript。我想知道@casl/prisma包是否也是如此。给出的示例似乎使用 Typescript ( type AppAbility...)

棱镜打字稿片段

和文档说...

TypeScript 支持:该包是用 TypeScript 编写的...

在此处输入图像描述

但这听起来像是对 TypeScript 的支持,但如果你愿意,你可以使用 vanilla Javascript。

0 投票
0 回答
54 浏览

javascript - 您可以根据用户属性定义 Casl 规则吗?

在 CASL 中定义规则时,您可以根据主题的属性来说明用户对哪个主题(模型)的能力。

在以下来自文档的示例中,您定义用户可以阅读文章,如果它的“属性”publishedfalse

在此处输入图像描述

我想知道我是否还可以在条件中添加用户属性,例如,如果published === false && user.is_active === true.

下面文档中的示例显示了在定义规则之前使用 if 语句完成此操作(显然不是 CASL 的功能,只是标准的 javascript 条件)。

在此处输入图像描述

这可以在can函数调用中以某种方式在规则上完成,比如传递的参数吗?

CASL 声明...

CASL 实现基于属性的访问控制

而且我认为 ABAC 是基于属性,而不仅仅是被访问的对象。类似于用户或环境的属性。见这里这里

0 投票
0 回答
36 浏览

javascript - 使用 acl 创建反应应用程序,得到 casl react t.on 错误

我刚刚开始使用 casl,似乎我必须遗漏一些东西。我创建了一个名为的文件can.js,它与文档中的示例完全相同:

在我App.tsx使用

然后在里面Main.ts我定义了一些这样的路线:

当您单击受限路线时,应用程序会引发错误:

我错过了一些明显的东西吗?

0 投票
0 回答
205 浏览

typescript - 为什么我的 CASL 能力在使用从 knex 返回的主题时不起作用?

我正在尝试将 CASL 与 NestJS 和 Knex 一起使用。我想限制用户只更新和删除他们自己的类别。但是,该能力似乎对我不起作用。

我使用这个类来创造能力:

在服务内部,我使用 knex 查询一个类别,然后尝试检查该类别的能力,但是当第一个if评估为false第二个if语句时,总是评估为true,因此抛出异常。

我试图检查从 knex 返回的类型,使用category instanceof Category. 这评估为假,所以我猜ability.can(Action.Update, category)它不起作用,因为category它不是 class 的实例Category。如果我尝试使用类构造函数创建一个新类别,它工作正常。

0 投票
0 回答
108 浏览

authorization - 在 NestJS 守卫中使用 CASL

在这部分文档中,并非所有使用警卫的用例都解释清楚:
NestJS Docs - 基于声明的授权

CaslAbilityFactory 为这些用例实现:

  • 管理员可以管理(创建/读取/更新/删除)所有实体
  • 用户对所有内容都有只读访问权限
  • 用户可以更新他们的文章(article.authorId === userId)
  • 已发布的文章无法删除(article.isPublished === true)

并且只解释了最琐碎的用例:

用户对所有内容都有只读访问权限

使用此控制器方法进行了演示:

但是我应该如何注释检查第三个或第四个用例的方法:

已发表的文章无法删除:
(article.isPublished === true)

有可能吗?对于此要求,@checkPolicies 中声明的 PoliciesGuard 或处理程序应该能够访问方法参数。

如何从守卫访问控制器方法参数?

如果您直接从控制器方法调用 ability.can(...) ,当然是一种解决方法:

但是这个解决方案不符合原来的声明模式。