Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ca0ced3
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
df76bb5
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
97b0b97
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
26ce195
addresses the comments
Tabintel Nov 14, 2025
5f9c37a
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
f2c0360
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
22dd9a3
Add LMS app template for fine-grained authorization
Tabintel Jul 14, 2025
5809796
Add LMS app template configuration
Tabintel Dec 5, 2025
24384dc
Update .gitignore and remove unused README
Tabintel Dec 5, 2025
24bb16e
Trino Schema Command
gemanor Jul 22, 2025
1c732f7
Fix Tests
gemanor Jul 22, 2025
ef2ef6e
Fix CI Tests
gemanor Jul 22, 2025
25dae3c
chore: add a RBAC blog template
Pradumnasaraf Jun 19, 2025
b95a587
feat: add roles and user sets for blog resource in RBAC configuration
Pradumnasaraf Jun 19, 2025
a524913
feat: add condition set rules and resource
Pradumnasaraf Jun 19, 2025
de4513e
chore: add condition set rules and resource sets for premium blog access
Pradumnasaraf Jun 20, 2025
9f7304e
refactor: update blog resource configuration and roles for comment ma…
Pradumnasaraf Jun 22, 2025
f480453
refactor: reorganize permissions for blog and comment resources, and …
Pradumnasaraf Jun 22, 2025
7c4b180
chore: add descriptions for blog and comment resources in Terraform t…
Pradumnasaraf Jun 22, 2025
bab5fb4
refactor: rename blog resources and roles to post for improved clarit…
Pradumnasaraf Jun 22, 2025
3e00c89
refactor: update permissions for post admin role and remove unused co…
Pradumnasaraf Jun 22, 2025
c719f69
refactor: formatting
Pradumnasaraf Jun 22, 2025
b5a1a45
fix attributes assigned under wrong key
orweis Sep 16, 2025
c376723
New version
gemanor Sep 16, 2025
1feca85
Adding support for EU region (#137)
EliMoshkovich Oct 15, 2025
7c91c5e
Create gateway-api-authorization.tf
miracleonyenma Aug 15, 2025
9122115
Add createColumnResources option to Trino configuration and update re…
danyi1212 Nov 10, 2025
6e6bd15
fix the publisher CI (#140)
EliMoshkovich Nov 10, 2025
5ce3e01
add expense approval system terraform file
Taofiqq Nov 26, 2025
11351e1
Add LMS app template configuration
Tabintel Dec 5, 2025
20287e8
Update .gitignore and remove unused README
Tabintel Dec 5, 2025
adbc42b
Remove duplicate lmsapp.tf file
Tabintel Dec 5, 2025
7afcb7b
Merge branch 'main' of https://github.com/Tabintel/permit-cli into ad…
Tabintel Dec 5, 2025
9ced17a
updates
Tabintel Dec 7, 2025
ac6b51e
Merge branch 'add-lms-app-template' of https://github.com/Tabintel/pe…
Tabintel Dec 7, 2025
436af9d
Update
Tabintel Dec 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ coverage
!templates/
!templates/*.tf
!source/templates/*.tf

!source/templates/lms-app

# .tfstate files
*.tfstate
Expand Down Expand Up @@ -133,6 +133,7 @@ web_modules/

terraform_server/.env


# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
Expand Down
7 changes: 7 additions & 0 deletions source/templates/lms-app/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# LMS App Template
This template configures a Learning Management System (LMS) with resources (`course`, `enrollment`, `assignment`), roles (`student`, `teacher`, `teaching_assistant`, `admin`), and fine-grained policies (e.g., students read enrolled courses).

## Usage
1. Install the Permit CLI: `npm install -g @permitio/cli`
2. Apply the template: `permit env template apply lms-app`
3. Replace `{{API_KEY}}` in `main.tf` with your Permit API key.
189 changes: 189 additions & 0 deletions source/templates/lms-app/lmsapp.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
terraform {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move it to the source/template folder, and add the template description to the root readme file
Also, revert the .gitignore

required_providers {
permitio = {
source = "permitio/permit-io"
version = "~> 0.0.12"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be same as other templates

}
}
}

provider "permitio" {
api_url = "https://api.permit.io"
api_key = "{{API_KEY}}"
}

# Resources
resource "permitio_resource" "Course" {
name = "Course"
description = "A course in the Learning Management System"
key = "Course"

actions = {
"create" = {
name = "create"
},
"read" = {
name = "read"
},
"update" = {
name = "update"
},
"delete" = {
name = "delete"
},
"enroll" = {
name = "enroll"
}
}
attributes = {
"enrolledStudents" = {
name = "Enrolled Students"
type = "array"
},
"teacherId" = {
name = "Teacher ID"
type = "string"
}
}
}

resource "permitio_resource" "Enrollment" {
name = "Enrollment"
description = "Student enrollment in a course"
key = "Enrollment"

actions = {
"create" = {
name = "create"
},
"read" = {
name = "read"
},
"delete" = {
name = "delete"
}
}
attributes = {}
}

resource "permitio_resource" "Assignment" {
name = "Assignment"
description = "An assignment linked to a course"
key = "Assignment"

actions = {
"create" = {
name = "create"
},
"read" = {
name = "read"
},
"update" = {
name = "update"
},
"delete" = {
name = "delete"
},
"grade" = {
name = "grade"
}
}
attributes = {
"dueDate" = {
name = "Due Date"
type = "string"
}
}
}

# Roles
resource "permitio_role" "Student" {
key = "student"
name = "Student"
permissions = ["Course:read", "Enrollment:create", "Assignment:read", "Assignment:submit"]

depends_on = [permitio_resource.Course, permitio_resource.Enrollment, permitio_resource.Assignment]
}

resource "permitio_role" "Teacher" {
key = "teacher"
name = "Teacher"
permissions = ["Course:create", "Course:read", "Course:update", "Course:delete", "Assignment:read", "Assignment:grade"]

depends_on = [permitio_resource.Course, permitio_resource.Assignment]
}

resource "permitio_role" "Teaching_Assistant" {
key = "teaching_assistant"
name = "Teaching Assistant"
permissions = ["Course:read", "Course:update", "Assignment:read"]

depends_on = [permitio_resource.Course, permitio_resource.Assignment]
}

resource "permitio_role" "Admin" {
key = "admin"
name = "Admin"
permissions = [
"Course:create", "Course:read", "Course:update", "Course:delete",
"Enrollment:create", "Enrollment:read", "Enrollment:delete",
"Assignment:create", "Assignment:read", "Assignment:update", "Assignment:delete", "Assignment:grade"
]

depends_on = [permitio_resource.Course, permitio_resource.Enrollment, permitio_resource.Assignment]
}

# Relations
resource "permitio_relation" "Course_Teacher" {
key = "assigned_to"
name = "Assigned To"
subject_resource = permitio_resource.Course.key
object_resource = permitio_resource.Teacher.key
depends_on = [
permitio_resource.Course,
permitio_resource.Teacher
]
}

# Resource Sets
resource "permitio_resource_set" "Enrolled_Course" {
name = "Enrolled Course"
key = "Enrolled_Course"
resource = permitio_resource.Course.key
conditions = jsonencode({
"allOf": [
{
"allOf": [
{
"resource.enrolledStudents": {
"contains": "{{user_id}}"
}
}
]
}
]
})
depends_on = [permitio_resource.Course]
}

# Role Derivations
resource "permitio_role_derivation" "Teacher_to_Course" {
role = permitio_role.Teacher.key
on_resource = permitio_resource.Course.key
to_role = permitio_role.Teacher.key
resource = permitio_resource.Course.key
linked_by = permitio_relation.Course_Teacher.key
depends_on = [
permitio_role.Teacher,
permitio_resource.Course,
permitio_relation.Course_Teacher
]
}

# Condition Set Rules
resource "permitio_condition_set_rule" "student_read_enrolled_course" {
user_set = "student"
resource_set = "Enrolled_Course"
permission = "Course:read"
depends_on = [permitio_role.Student, permitio_resource_set.Enrolled_Course]
}
Loading