SPDL语言简介

作者: 转圈圈的程序员 | 来源:发表于2019-06-18 21:39 被阅读0次

本文翻译自 https://medium.com/speedle/spdl-language-brief-introduction-f7cc085a130a

SPDL是Speedle Policy Definition Language的简称,他是Speedle开源项目的核心部件。

SPDL可以定义两种Policy:Authorization Policy 和 Role Mapping Policy。(为了保证术语的统一,下文将使用这些术语的英语名称)Authorization Policy即授权策略,用于把某些Permission (也就是Resource + Action)授予某些User/Group/Role及其他Entity。比如我们定义这样一个策略“所有注册用户都可以借书”。

我们可以用SPDL定义两大类策略 (Policy,后同):授权策略(Authorization Policy,后同)和角色映射策略(Role Mapping Policy或者Role Policy,后同。授权策略可以把某些权限授予给某种身份,这些身份可以是用户、用户组、角色、进程、应用、服务等各种实体。例如,我们说“所有的注册用户都可以借书”,这条策略用SPDL表示就是“grant role RegisteredUser borrow book”。而角色映射策略则是用于赋予某个实体特定的角色,在此实体可以是用户、用户组、角色、进程、应用等等各种实体。例如,用户紫萱是一个注册用户,我们可以用SPDL如下表示“grant user ZiXuan role RegisteredUser”。

SPDL支持角色的层级关系(Role Hierarchy)。我们可以把一个角色赋予另外一个角色。例如在一个公司里通常有员工经理两个角色。如果某用户是经理角色,显然他也自动拥有员工的角色。也就是说经理肯定也是员工。在这种场景下我们可以定义如下的策略“grant role Manager role Employee”。

条件(Condition)是另外一个非常有用的特性。它用来定义策略(允许或者拒绝)何时生效。例如,某图书馆有部分用户只能在周末借书。我们可以创建一个新角色WeekendUser,并通过如下策略赋予其权限“grant role WeekendUser borrow book if request_weekday in (‘Saturday’, ‘Sunday’)”。请注意,在这条策略理我们使用了条件if request_weekday in (‘Saturday’, ‘Sunday’)。该条件用到了属性request_weekday。授权决策阶段,如果该条件满足,则WeekendUser角色可以借书,反之则不能。条件(Condition)可以为像 (A==B) and (C>D) or ((E <=F) and functionC(…))一样的任意条件表达式。

有时我们也可以在角色映射策略里使用条件。例如,子涵是711便利店的一名夜班员工,他从晚上10点工作到早上8点。我们可以用SPDL创建如下策略“grant user ZiHan role PartTimeEmployee if request_hour > 22 or request_hour < 8

您也可以完全不用RBAC模型,不定义任何角色,直接把某个权限赋予某个用户,例如grant user William borrow book。您也可以加入条件:grant user William borrow book if request_weekend in (‘Saturday’, ‘Sunday’)

以上例子中我们都用的Grant Effect,其实Deny Effect也非常有用。有时候我们想显式地禁止某人做某事。我们可以这样做“deny user XuanYu borrow book if request_weekend in (‘Saturday’)”。这样就算在策略库中有其他策略允许轩宇周六借书,有这条策略在,他还是不能借。

好了,以上就是今天要分享的,更多内容请访问我们在Github的项目和网站。

GitHub项目: https://github.com/oracle/speedle

Speedle网站:https://speedle.io

相关文章

  • SPDL语言简介

    本文翻译自https://medium.com/speedle/spdl-language-brief-intro...

  • Solidity语言简介

    title: Solidity语言简介date: 2018-2-26 18:50 Solidity语言简介 @(区...

  • go语言简介

    Go是谷歌公司2009年推出的一种新的编程语言,虽然已经10年历史了,但毕竟一种语言的发展是很漫长的一个过程,在编...

  • C语言简介

    C语言简介 谈起C语言的介绍,在网络上有各种各样的说明,各种C语言教学书籍中也都有对C语言进行简单的介绍。那些都没...

  • Verilog 语言简介

    什么是 Verilog 语言 Verilog一般指Verilog HDL。Verilog HDL是一种硬件描述语言...

  • Go语言简介

    一、什么是Go语言? Go是一门开源、并发支持、具有垃圾回收机制、编译性系统编程语言,在静态编译语言的高性能和...

  • Perl 语言简介

    为了很久不用 Perl 的人,快点熟悉这门语言: 使用 given .. when 然后就能用: 语句后面的分号 ...

  • 脑语言简介

    【脑语言】一种统一编程方式,用文言文编程。 这是一种通用编程语言(更准确说应该是编程方式),利用汉字一令(一个字的...

  • golang语言简介

    语言来历 golang是由Google公司在c语言的基础上开发的一款开源的编程语言 2007年Google的几个大...

  • Python 语言简介

    姓名:张坤 学号:1700030080 转载自:https://www.cnblogs.com/chenwolo...

网友评论

    本文标题:SPDL语言简介

    本文链接:https://www.haomeiwen.com/subject/szbqqctx.html