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://www.haomeiwen.com/subject/szbqqctx.html