Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Reduces pre-loaded rollups that might not be used
  • You don't need a loader job for each one of these groups
  • Any Grouper user could edit the policies if they can READ underlying groups.  The expressions are secure
  • The memberships of the ABAC groups are real time based on an intelligent change log consumer
  • You can have a UI to help build it and give good error messages
  • Could visualize the policies.  Perhaps could be integrated into existing visualization
  • This solved the issue of composites with any number of factors

Expressions

The expression can only be written by people who can READ groups in the abac group/subject tables.

Boolean logic and wildcards are required

GroupTypeExpressionDescription
org:whatever:app:somePolicyref/basis groups as members(group.campus =~ ['palmer', southern'] and termStart - 7 > sysdate and termEnd + 7 < sysdate)Give me groups as members where campus and term match
org:whatever2:app2:somePolicy2subjects as membersperson.primaryAffiliation =~ ['faculty', 'staff'] and person.dept =~ ['physics', 'math']Subjects in a role and dept
org:whatever3:app3:somePolicy3could have some groups and subjects

(group.campus =~ ['palmer', southern'] and termStart - 7 > sysdate and termEnd + 7 < sysdate)

or (person.primaryAffiliation =~ ['faculty', 'staff'] and person.dept =~ ['physics', 'math'])

Take some group populations and some subjects

Requirements for expressions

NamePriorityDescriptionJSONGraphQLSQLJEXL
ParsableRequired

Needs to be parsed so we can 
check security, do real-time
updates, and analyze policies

YesProbablyProbablyYes
Library in Grouper alreadyNice to haveAvoid library bloatYesSoon perhapsNo (there are
Java SQL parsers)
Yes
Supports boolean logicRequiredand, or, not, etcClunkyYesYesYes
Supports groupingRequiredparensClunkyYesYesYes
Needs wildcardsRequiredSome way to have wildcards for valuesYesYesYesNot built in but we can use =^ for "like"

Seems like JEXL is a good place to start

Expression 1: Campus not in palmer or southern, and term start more than 7 days ago

Code Block
group.campus !~ ['palmer', 'southern'] and group.termStart - 7 > sysdate

Tables

Two Grouper tables will be constructed for performance reasons (getting relationships and point-in-time)

Table nameDescription
grouper_abac_group_attributesRows for groups and attribute names and values
grouper_abac_subject_attributesRow for subjects and attribute names and values

...

grouper_abac_subject_attributes
Subject idSource idAttribute nameAttribute valueActiveNext start timeLast end time
jsmithpersonaffiliationstaffT

jsmithpersondeptmathT

jsmithpersondeptphysicsT

rjohnsonpersonschoolengineeringF
11/1/2020
wturnerpersonprimaryAffiliationfacultyT

Expressions

The expression can only be written by people who can READ groups in the abac group/subject tables.

Boolean logic and wildcards are required

...

(group.campus =~ ['palmer', southern'] and termStart - 7 > sysdate and termEnd + 7 < sysdate)

or (person.primaryAffiliation =~ ['faculty', 'staff'] and person.dept =~ ['physics', 'math'])

...

Requirements for expressions

...

Needs to be parsed so we can 
check security, do real-time
updates, and analyze policies

...

Seems like JEXL is a good place to start

Expression 1: Campus not in palmer or southern, and term start more than 7 days ago

...




Parse expression with JEXL

Feed the expression through this simple program

...