如何确定层级组织中的权限?

2024-05-20

我正在尝试创建高性能逻辑来确定分层组织内的权限。

员工被分配到一个或多个单位。单元是分层的,(理论上)无限深度(实际上不超过 6 层)。

例如,员工Jane可能是Supervisor of the Accounts Receivable单元(的子单元)Accounting单位),还有Member of the Ethics Committee(一个孩子Committees,它本身就是Office of the CEO).

As the Supervisor of Accounts Receivable, Jane应该有权查看其他人的人事档案Accounts Receivable,但不在Ethics Committee因为她只是一个Member。同样,公司的正式员工Accounts Receivable单位不应该能够查看彼此的个人资料,尽管他们都需要获得许可才能查看公司的会计记录。

我想这个的数据库架构将如下所示:

| **employees** | **units**   | **positions** | **assignments** | **permissions** |
| ------------- | ----------- | ------------- | --------------- | --------------- |
| id            | id          | id            | employee_id     | unit_id         |
| name          | name        | title         | unit_id         | is_management   |
|               | parent_path | is_management | position_id     | ability         |

考虑到这一点,我如何编写一个高性能查询来确定哪些权限Jane已经结束Sam, an Accountant in Accounts Receivable, 与超过Bill, a Receptionist in Office of the CEO?

我最接近的是这样的:

create function permissions(actor employees, subject employees) returns setof permissions as $$
begin
  for unit_id in select unit_id from assignments where employee_id = subject.id loop
    select permissions.name
    from assignments
    left join units on (unit.id = assignments.unit_id)
    left join positions on (positions.id = assignments.position_id)
    left join permissions on (
      permissions.unit_id = units.id
      and permissions.is_management = positions.is_management
    )
    where assignments.user_id = actor.id
      and (units.parent_path = unit_id or units.parent_path @> unit_id)
  end loop;
end;
$$ language plpgsql stable;

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定层级组织中的权限? 的相关文章

  • 如何按照最初给出的时区存储和显示日期?

    我有一台服务器正在从不同时区的客户端提供数据 数据源包含人物 他们的出生日期和其他事件日期 出于我们的目的 如果我们可以将日期存储为给我们的日期 那就很方便了 例如 如果客户位于加利福尼亚州 并且告诉我们该人的出生日期是 5 月 31 日
  • 数组 (UUID[ ]) 会破坏 1NF 吗?

    我的问题是包含 UUID 数组的字段是否会破坏范式 http en wikipedia org wiki Database normalization 在包含数组之前位于 NF 中的表中 原表 CREATE TABLE Floor Floo
  • Postgres 服务器性能在达到一定数量的记录后急剧下降

    我正在使用游标从大型 postgres 表中检索记录 4亿条记录 使用子表对数据进行分区 我的游标定义为 select from parent table order by indexed column 同时使用 JDBC 和 psql 前
  • Flask-SQLAlchemy 多态关联

    我有两个主表role and users 以及关于users我让 3 个关联到表operator teacher and student 到目前为止 我是这样做的 class Role db Model tablename roles id
  • psql:致命:角色“vagrant”不存在[重复]

    这个问题在这里已经有答案了 我创建了一个流浪实例 每次尝试时都会收到此错误psql在终端如何修复它 错误如下 psql 致命 角色 vagrant 不存在 我以为流浪汉会照顾这个 这是我的流浪文件 Vagrant require plugi
  • 在实时计算机上更新(或替换)整个数据库表的最佳方法是什么?

    我每周都会收到一个数据源 我将对其进行解析并放入数据库中 数据每周不会有太大变化 但我应该定期更新数据库 除了每周更新外 数据是静态的 目前重建整个数据库不是问题 但最终该数据库将上线 人们可以在我重建数据库时查询该数据库 数据量并不小 几
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • -bash:pg_dump:找不到命令

    我正在尝试在本地为我的 Rails 应用程序提取一个生产数据库 我本地的 postgres 版本太低 所以我需要从 9 4 1 更新到 Postgresql 9 6 5 我通过 Homebrew 安装了 Postgres 9 6 6 如下所
  • CREATE VIEW 指定的列名多于列

    如果我在 PostgreSQL 9 4 8 中运行以下语句 我会收到以下错误消息 CREATE VIEW 指定的列名多于列 但为什么 没有f1返回一个包含 5 列的表格 不应该v1也有 5 列吗 另外 如果我从第一个中删除演员阵容SELEC
  • postgres/npgsql 中参数赋值的符号 (@) 与冒号 (:) 之间的区别

    我正在尝试搜索这个 但是使用符号几乎不可能获得结果 这两者之间有区别吗 例如被放入 C 中的查询字符串中 string strCmd SELECT FROM MyFunction user id action date vs string
  • PostgreSQL C 函数建议

    有人可以给我一个关于自定义函数的初步尝试的提示吗 我需要用 2 个参数构造查询 一个 varchar 和一个 unix 时间戳 一个整数 我花了 3 个小时才得到下面的几行结果 查询测试可以是 select from pdc posot c
  • PostgreSQL Age() 函数:在不同月份登陆时出现不同/意外的结果

    今天 我在 PostgreSQL 9 6 中运行此查询时遇到了无法解释的结果 SELECT age 2018 06 30 2018 05 19 AS one age 2018 07 01 2018 05 20 AS two 两列的预期结果
  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • 无法安装 psycopg2 (pip install psycopg2)

    我使用的是 MAC 和 python 版本 2 7 14 Collecting psycopg2 Could not fetch URL https pypi python org simple psycopg2 There was a p
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • 在 Rails 中禁用连接池以使用 PgBouncer

    我们有一个 Ruby on Rails 4 2 8 项目 可以访问大型 PostgreSQL 数据库 我们将使用 PgBouncer 添加一个新的连接池服务器 由于 PgBouncer 将处理数据库连接池 我们是否需要关闭 Rails 自动
  • 如何使用PostGIS将多边形数据转换为线段

    我在 PostgreSQL PostGIS 中有一个多边形数据表 现在我需要将此多边形数据转换为其相应的线段 谁能告诉我如何使用 PostGIS 查询进行转换 提前致谢 一般来说 将多边形转换为线可能并不简单 因为没有一对一的映射 http
  • 如何使用 typeorm 在 postgres 中保存 json 对象数组

    我正在尝试在 postgres 中保存 jsonb 类型的对象数组 Entity Column type jsonb array true nullable true testJson object 我在邮递员中发送的json testJs
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a
  • 如何从 PostgreSQL 中的时间戳列值提取一天中的时间(或小时)?

    我正在尝试从 PostgreSQL 中的 时间戳 列中提取一天中的时间 这是我的做法 但是 太糟糕了 知道如何做得更好吗 SELECT date part hour date demande text hours date part min

随机推荐

  • 如何请求用户开启定位服务

    我需要我的应用程序来访问用户的当前位置 它在应用程序开始时检查用户是否已设置 如果没有 我需要应用程序显示提示以使其使用位置服务 就像警报视图一样 点击按钮 它应该会带您进入 iPhone 上的位置服务屏幕 您可以通过以下代码检查 loca
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • Chrome 的独立代理设置的解决方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我做了一个搜索并且也在这个forum https stackoverflow com questions 19118181 why doe
  • 如何使用对象数组创建猫鼬模式

    我有这个 json data id 1 name Sample test description this is a sample test category tests points 100 startDate 2018 02 15 00
  • 如何修复圆角按钮中边框和背景之间的空白?

    我为我的 WPF 应用程序创建了一个简单的按钮模板
  • Mono Android 中的搜索对话框

    我正在尝试根据此处的文档在 Mono Android 应用程序中实现搜索对话框 http developer android com guide topics search search dialog html http developer
  • 使用 '--' 作为 boost::program_options 的选项结束标记

    指示命令行程序选项结束的传统方法是使用选项 如何让 boost program options 将其识别为选项并接受命令行的其余部分作为位置参数 以下不起作用 namespace po boost program options po po
  • 单个方法(即扩展方法)之间的调用不明确

    我有一个扩展方法 例如 public static class Extension public static string GetTLD this string str var host new System Uri str Host i
  • Keytool 应用程序在哪里?

    我需要在android中使用mapview控件 但我似乎不明白如何运行keytool 是用eclipse安装的吗 我好像找不到下载链接 Thanks keytool http docs oracle com javase 7 docs te
  • Android 相机 2 API

    我一直在尝试camera2 API 我已经从以下位置下载了代码 https developer android com samples Camera2Video index html https developer android com
  • 如何将 Razor 视图转换为字符串?

    我想使用我的 Razor 视图作为某种发送电子邮件的模板 所以我想将我的模板 保存 在视图中 将其作为字符串读入控制器 进行一些必要的替换 然后发送它 我有有效的解决方案 我的模板作为 HTML 页面托管在某处 但我想将其放入我的应用程序中
  • 在后台任务中安排通知

    我正在为 iOS 开发一个日历 闹钟应用程序 它与网络服务器同步 当在服务器上添加活动时 会发出推送通知 以便 iOS 客户端可以获取新数据 并根据需要更新和安排下一次警报的时间 本地通知 但这仅在应用程序在客户端打开时才有效 我希望客户端
  • 快速 Perl signint 处理程序

    收到 Ctrl C 时处理程序清理的最方便 最清晰的方法是什么 例如 当我的套接字服务器以这种方式被终止时 TCP 套接字永远不会关闭 我想要一个很好的衬里 我可以将其放在程序的顶部来设置 sigint 处理程序 或类似 atexit 的东
  • 在bash脚本中分割字符串[重复]

    这个问题在这里已经有答案了 我想分割一个字符串并需要其中的一些参数 USER dn uid dfl3030 cn users cn accounts dc tenant dc ycs dc io cn Reb Lena Schmidt kr
  • JavaScript 倒计时,将秒格式化为 HH:MM:SS

    我有一个倒计时器 需要 秒 并将其格式化为 HH MM SS 格式 问题是第二个显示 60 这是我的代码 这是一个更大的类的一部分 关于最佳方式格式的任何建议 以便它不使用 60 作为第二个 谢谢你 formatSeconds functi
  • 如何使 FSI 在 NET5 下工作并让愚蠢的 stackoverflow 消息“标题不能包含...”闭嘴?

    我正在将一个相当小的 F 项目从 Net Framework 迁移到 NET5 迁移非常简单 一切正常 包括测试 但是 当我运行一些脚本时 我现在收到以下错误 Microsoft R F Interactive version 11 0 0
  • 如何限制对 Kubernetes 服务的访问?

    我正在尝试使用以下 yaml 创建服务 正如您所看到的 我正在尝试限制 10 0 0 0 8 范围内对该服务的访问 apiVersion v1 kind Service metadata name nginx service spec po
  • 无法在 Android 10 中创建目录

    我无法在 android 10 中创建目录 它可以在 android Oreo 之前的设备上运行 我尝试了两种创建文件夹的方法 Using File mkdir File f new File Environment getExternal
  • C 语言中 sizeof(void) 等于 1? [复制]

    这个问题在这里已经有答案了 可能的重复 空洞的大小是多少 https stackoverflow com questions 1666224 what is the size of void 大家好 我正在使用 gcc 编译我的 C 程序
  • 如何确定层级组织中的权限?

    我正在尝试创建高性能逻辑来确定分层组织内的权限 员工被分配到一个或多个单位 单元是分层的 理论上 无限深度 实际上不超过 6 层 例如 员工Jane可能是Supervisor of the Accounts Receivable单元 的子单