Skip to content

Commit 0c173c1

Browse files
committed
TravelPlanner: Add logging for delegation of permissions
1 parent ce01c6d commit 0c173c1

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

Modules/Examples/Misc JVM/src/main/scala/ex2024travel/lofi_acl/example/monotonic_acl/PermissionTreePane.scala

+5-2
Original file line numberDiff line numberDiff line change
@@ -228,14 +228,15 @@ class PermissionTreePane(
228228
PARTIAL,
229229
Map(
230230
"data" -> PermissionTree(PARTIAL, entries),
231-
"observed" -> PermissionTree.allow
231+
"observed" -> PermissionTree.allow,
232+
"deletions" -> PermissionTree.allow
232233
)
233234
))
234235
))
235236
case _ =>
236237

237238
inline def expenseWildcardSubPermissionTree(field: String): IArray[String] = {
238-
IArray(s"expenses.data.*.value.$field", "expenses.data.*.dots", "expenses.observed")
239+
IArray(s"expenses.data.*.value.$field", "expenses.data.*.dots", "expenses.observed", "expenses.deletions")
239240
}
240241

241242
// Expenses wildcard
@@ -292,6 +293,8 @@ class PermissionTreePane(
292293
read = filter.minimizePermissionTree(read)
293294
filter.validatePermissionTree(write)
294295
write = filter.minimizePermissionTree(write)
296+
println(s"Read: ${read.toPathStringSet}")
297+
println(s"Write: ${write.toPathStringSet}")
295298
(read, write)
296299
}
297300
}

Modules/Replication/jvm/src/main/scala/lofi_acl/access/PermissionTree.scala

+14
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import lofi_acl.access.PermissionTree.{allow, lattice}
55
import rdts.base.{Bottom, Lattice}
66

77
import scala.annotation.{tailrec, targetName}
8+
import scala.collection.immutable.Queue
89

910
case class PermissionTree(permission: Permission, children: Map[String, PermissionTree]) {
1011

@@ -34,6 +35,19 @@ case class PermissionTree(permission: Permission, children: Map[String, Permissi
3435
label -> leftChildren(label).intersect(rightChildren(label))
3536
)
3637
lattice.normalizeWildcards(PermissionTree(PARTIAL, intersectionOfChildren.toMap))
38+
39+
def toPathStringSet: Set[String] = {
40+
if permission == ALLOW then return Set("*")
41+
val result = Set.empty[String]
42+
extension (p: PermissionTree)
43+
def pathStringsRec(pathElements: Queue[String]): Set[String] = p match
44+
case PermissionTree(ALLOW, _) => Set(pathElements.mkString("", ".", ".*"))
45+
case PermissionTree(PARTIAL, children) if children.isEmpty => Set()
46+
case PermissionTree(PARTIAL, children) =>
47+
children.flatMap((childName, childPerm) => childPerm.pathStringsRec(pathElements.appended(childName))).toSet
48+
49+
this.pathStringsRec(Queue.empty)
50+
}
3751
}
3852

3953
object PermissionTree {

0 commit comments

Comments
 (0)