社区首页 >问答首页 >Neo4j和Rails:如何只返回基于用户权限的节点

Neo4j和Rails:如何只返回基于用户权限的节点
EN

Stack Overflow用户
提问于 2017-01-07 09:27:35
回答 1查看 66关注 0票数 1
  1. 如何返回用户拥有权限的项目的索引?
  2. 如何返回用户所在组具有权限的项目的索引?
  3. 仅当用户拥有权限时,如何返回单个项?
  4. 仅当用户所在的组具有权限时,如何返回单个项?

注意:我知道可以查询Item.all__,然后遍历数组并只提取.has_permissions == User__中的项,但这完全忽略了在图中包含所有内容的好处,因此不是答案。

为了保持这个简单,假设有三个对象:

  • 一项
  • 用户
  • A组

典型图形情况:

代码语言:javascript
代码运行次数:0
复制
(User)<-[:HAS_PERMISSIONS]-(Item)
(Group)<-[:HAS_PERMISSIONS]-(Item)
(Group)-[:HAS_MEMBERS]->(User)

与模型:

代码语言:javascript
代码运行次数:0
复制
class Item 
  include Neo4j::ActiveNode
  property :name, type: String
  property :description, type: String

  has_many :out, :user_permission_to, type: :PERMISSION_TO, model_class: :User
  has_many :out, :group_permission_to, type: :PERMISSION_TO, model_class: :Group
end

class Identity 
  include Neo4j::ActiveNode
  property :username, type: String

  has_many :in, :permission_to, type: :PERMISSION_TO, model_class: :Item
  has_many :in, :groups, type: :GROUP_MEMBER, model_class: :Group
end

class Group 
  include Neo4j::ActiveNode
  property :group_name, type: String

  has_many :in, :permission_to, type: :PERMISSION_TO, model_class: :Item
  has_many :out, :members, type: :GROUP_MEMBER, model_class: :User
end

对于简单的控制器:

代码语言:javascript
代码运行次数:0
复制
# GET /items
def index
  @items = Item.all
  render json: @items
end

# GET /item/1
def show
  render json: @item
end
EN

回答 1

Stack Overflow用户

发布于 2017-01-08 13:53:50

首先,我建议查看这篇文章 (下半部分涉及非常类似的访问控制)。

“如何返回用户拥有权限的项目的索引?”

你可以用几种方法。更明确地:

代码语言:javascript
代码运行次数:0
复制
identity.as(:id).query.match("(id)<-[PERMISSION_TO*1..2]-(item:Item)").pluck(:item)

或者,我认为这样做是可行的:

代码语言:javascript
代码运行次数:0
复制
identity.permission_to(rel_length: 1..2)

“如何返回用户所在组具有权限的项目的索引?”

简单:

代码语言:javascript
代码运行次数:0
复制
identity.groups.permission_to

“仅当用户拥有权限时,如何返回单个项?”

对于上述两种解决办法:

代码语言:javascript
代码运行次数:0
复制
identity.as(:id).query.match("(id)<-[PERMISSION_TO*1..2]-(item:Item)").limit(1).pluck(:item)

# or

identity.permission_to(rel_length: 1..2).first

“仅当用户所在的组具有权限时,如何返回单个项?”

代码语言:javascript
代码运行次数:0
复制
identity.groups.permission_to

另外,一些反馈意见:

使用“索引”一词的方式有点混乱,因为Neo4j有允许在标签上对属性进行性能查询的索引。

我可能会像这样做我的模特:

代码语言:javascript
代码运行次数:0
复制
class Item 
  include Neo4j::ActiveNode
  property :name, type: String
  property :description, type: String

  has_many :in, :users_with_permission, type: :CAN_ACCESS, model_class: :Identity
  has_many :in, :groups_with_permission, type: :CAN_ACCESS, model_class: :Group
end

class Identity 
  include Neo4j::ActiveNode
  property :username, type: String

  has_many :out, :accessible_items, type: :CAN_ACCESS, model_class: :Item
  has_many :out, :groups, type: :IN_GROUP # Don't need `model_class: :Group` here
end

class Group 
  include Neo4j::ActiveNode
  property :group_name, type: String

  has_many :out, :accessible_items, type: :CAN_ACCESS, model_class: :Item
  has_many :in, :members, type: :IN_GROUP, model_class: :Identity
  # You could also do:
  # has_many :in, :members, model_class: :Identity, origin: :groups
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41524340

复制
相关文章
用户、角色和权限
InterSystems IRIS®具有系统级安全性,以及一组与sql相关的额外安全性特性。 在数据库级保护之外,InterSystems SQL安全性提供了额外级别的安全功能。 SQL和系统级安全性之间的一些关键区别是:
用户7741497
2022/06/07
2.1K0
用户、群组和权限
Linux系统所采取的安全措施如下,用户登录系统时必须提供用户名和密码,以用户和群组来控制访问文件和其他资源,每个文件都属于一个用户并与一群文件相关,每个进程都与一个用户和群组相关联。
狼啸风云
2019/01/18
1.3K0
基于切面与注解的用户权限拦截
特点: (优)简单, 稳健, 在满足需求的情况下非常适合用来做权限控制; (劣)灵活度不高,与代码耦合太高,权限不可以动态配置。
喜欢天文的pony站长
2020/06/29
7620
基于切面与注解的用户权限拦截
基于注解的用户权限拦截Spring HandlerInterceptor
4.1 测试未登录情况下调用标记了 @LoginUser的获取当前登陆用户信息接口
喜欢天文的pony站长
2020/06/29
1.1K0
基于注解的用户权限拦截Spring HandlerInterceptor
Linux下设置权限让用户只删除自己的文件的方法
之前我们知道如何针对用户和用户组来设置文件权限。通常是用三个八进制来设置权限的,这里我要说的是,其实是由四个八进制表示的。其中第一个八进制我们通常是忽略的。第二个到第四个是对应于SUID,SGID,sticky-bit。
用户1685462
2021/08/30
2.2K0
如何创建MySQL用户帐户和授予权限
MySQL是最流行的开源关系数据库管理系统。 MySQL服务器允许我们创建大量用户帐户并授予适当的权限,以便用户可以访问和管理数据库。
星哥玩云
2022/08/18
2.6K0
如何创建MySQL用户帐户和授予权限
linux如何限制用户权限
具体开展的方法: 1. 修改代码配置,将log输出到一个单独的目录:/search/odin/flxlog/swc.log 2. 新建一个账户flxlog,默认目录为log目录:useradd -d /search/odin/flxlog/swc.log flxlog 3. 创建flxlog密码为flxlog:passwd flxlog。 4. 修改/search/odin/flxlog/文件夹及文件的用户和用户组:chown -R flxlog:flxlog /search/odin/flxlog/ 5. 修改泛灵犀代码目录的权限为root账号读写、其他账号不能查看: chown -R root:root /search/odin/test/test/ chmod 700 swc_15001/ 6. 切换到flxlog用户下,验证下结果:
软测小生
2019/07/05
9.9K0
linux如何限制用户权限
TASKCTL用户权限如何设置
​admin用户是系统自带的超级用户, 但我们不建议你用admin用户登录使用Designer、Monitor组件。通过Admin(平台管理组件),为每个用户建立独立的用户,是使用TASKCTL的良好习惯。
TASKCTL 任务调度平台
2022/03/31
2.7K0
TASKCTL用户权限如何设置
linux用户和权限管理
用户名:密码:上次修改密码的天数:密码最短有效天数:提前多少天警告过期:过期多少天禁用:失效日期:保留字段
yuezhimi
2020/09/30
3.9K0
如何使用Passenger和Nginx部署Rails
如果您是Ruby on Rails开发人员,可能需要Web服务器来托管您的Web应用程序。本教程将向您展示如何使用Phusion Passenger。作为Rails的Web服务器,Passenger易于安装,配置和维护,可与Nginx或Apache一起使用。在本教程中,我们将在Ubuntu上安装带有Nginx的Passenger。
乌鸦
2018/08/06
5K0
如何使用Passenger和Nginx部署Rails
Neo4J:创建带关系的节点
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程裕强
2019/10/22
2.5K0
Neo4J:创建带关系的节点
MySQL 用户和权限管理
站在安全的角度看,不同的业务如果连的是同一个 MySQL 服务,就需要创建不同的用户,并为这些用户配置他们所需要的最小权限。这一节内容就来聊聊 MySQL 的用户和权限管理。
数据库交流
2022/04/25
3.2K0
用户和权限的基本概念
/etc/passwd文件存放的是用户的信息, 由6个分好组成的7个信息, 分别是
用户4870038
2021/02/05
7450
用户和权限的基本概念
在 Ubuntu 中如何设置和管理 root 用户权限?
在 Ubuntu 操作系统中,root 用户是具有最高权限的用户,可以执行对系统的所有操作。但是,在默认情况下,Ubuntu 禁用了 root 用户,而是使用 sudo 命令来实现管理员权限。本文将详细介绍在 Ubuntu 中如何设置和管理 root 用户权限,并讨论一些常见的安全风险和预防措施。
网络技术联盟站
2023/06/04
7.8K0
centos8下用户设置权限后只删除自己文件的方法
SUID:设置了SUID 位的文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。如果所有者是 root 的话,那么执行人就有超级用户的特权了
用户8965210
2021/08/31
8390
使用RoleBasedAuthorization实现基于用户角色的访问权限控制
添加库 Sang.AspNetCore.RoleBasedAuthorization
桑榆肖物
2022/11/18
1.3K0
PostgreSQL用户角色和权限管理
4、任何属于该组角色的对象都必须先被删除或者将对象的所有者赋予其它角色,任何赋予该组角色的权限也都必须被撤消。
数据和云
2022/02/25
4.8K0
PostgreSQL用户角色和权限管理
MySQL 之用户和权限管理
在MySQL 5.7.24中,关于用户及用户权限的相关信息,都保存在了mysql库中的user表中,可以将user表中大致分为用户列、权限列、安全列、资源控制列这几种。
小手冰凉
2020/05/21
2K0
MySQL 用户管理和权限管理
在项目中,一个数据库有很多人需要使用,不能所有的人都使用相同的权限,如果人比较多,一人一个用户也很难管理。一般来说,会分超级管理员权限,管理员权限,读写权限,只读权限等,这样方便管理。当然,具体怎么管理权限根据实际情况来确定。
Python碎片公众号
2021/02/26
4.9K0
MySQL 用户管理和权限管理
MySQL用户和权限管理(二)
在前面的文章中MySQL用户和权限管理(一)介绍了MYSQL用户和权限体系以及访问控制的两个阶段;
SEian.G
2021/03/03
2.9K0

相似问题

如何基于neo4j节点标签返回集合?

10

基于用户权限的Rails 3 ActiveRecord验证

32

Neo4j如何返回节点和关系?

22

Rails -基于缓存和权限的视图

11

Neo4j空间只返回一个节点

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文