When to useSuppose:
- An employee is hired at a company and thus gains access to all of the company’s resources.
- An employee quits and thus loses access to all of the company’s resources.
- A user joins a GitHub organization and gains access to the organizations private repositories.
- A student graduates from school and loses access to the school’s facilities.
Before you start
In order to understand this guide correctly you must be familiar with some OpenFGA Concepts and know how to develop the things that we will list below. Assume that you have the following authorization model.You have two types:
orgthat can have amemberrelationdocumentthat can have areaderrelation.
Prerequisites and starting model
Prerequisites and starting model
Let us also assume that we have an With the above authorization model and relationship tuples, OpenFGA will respond with
org called “contoso” and a document called planning, and every member of that org can read the document. That is represented by having the following relationship tuple in the store:Members of the contoso org can read the planning document{"allowed":false} when check is called to see if Anne can read document:planning.Now let’s make Anne a member of org:contoso by adding another tuple:The OpenFGA service will now correctly respond with {"allowed":true} when check is called to see if Anne can read document:planning, but it will still respond with {"allowed":false} if we ask the same question for another user called Becky, who is not a member of the group org:contoso.Modeling user groups
You need to know how to add users to groups and grant groups access to an object. Learn more →Managing group access
You need to know how to manage group access to an object. Learn more →OpenFGA concepts
- A Type: a class of objects that have similar characteristics
- A User: an entity in the system that can be related to an object
- A Relation: is a string defined in the type definition of an authorization model that defines the possibility of a relationship between an object of the same type as the type definition and a user in the system
- An Object: represents an entity in the system. Users’ relationships to it can be define through relationship tuples and the authorization model
- A Relationship Tuple: a grouping consisting of a user, a relation and an object stored in OpenFGA
Step by step
01. Revoking group membership
Imagine that every member oforg:contoso has a reader relationship to 1000 documents. Now imagine that anne is no longer a member of org:contoso, so we want to revoke her access to all those documents, including document:planning. To accomplish this, we can simply delete the tuple in OpenFGA that specifies that Anne is a member of org:contoso.
02. Validating revoked member no longer has access
Once the above relationship tuple is deleted, we can check if Anne can readdocument:planning. OpenFGA will return { "allowed": false }.
Related Sections
Check the following sections for more on how to model group.Modeling User Groups
Learn about how to model users and groups.
Managing Group Access
Learn about managing group access.