|
1 | | -# session-role-manager |
| 1 | +# session-role-manager |
| 2 | +[](https://codebeat.co/projects/github-com-jcasbin-session-role-manager-master) |
| 3 | +[](https://github.com/jcasbin/session-role-manager/actions) |
| 4 | +[](https://codecov.io/github/jcasbin/session-role-manager) |
| 5 | +[](https://javadoc.io/doc/org.casbin/session-role-manager) |
| 6 | +[](https://mvnrepository.com/artifact/org.casbin/session-role-manager/latest) |
| 7 | +[](https://discord.gg/S5UjpzGZjN) |
| 8 | + |
| 9 | +Session Role Manager is the [Session-based](https://en.wikipedia.org/wiki/Session_(computer_science)) role manager for [jCasbin](https://github.com/casbin/jcasbin). With this library, jCasbin can load session-based role hierarchy (user-role mapping) from jCasbin policy or save role hierarchy to it. The session is only active in the specified time range. |
| 10 | + |
| 11 | +## Installation |
| 12 | +```xml |
| 13 | +<dependency> |
| 14 | + <groupId>org.casbin</groupId> |
| 15 | + <artifactId>session-role-manager</artifactId> |
| 16 | + <version>1.0.0</version> |
| 17 | +</dependency> |
| 18 | +``` |
| 19 | + |
| 20 | +## Example |
| 21 | +```java |
| 22 | +import org.casbin.jcasbin.main.Enforcer; |
| 23 | +import org.casbin.jcasbin.persist.file_adapter.FileAdapter; |
| 24 | +import static org.junit.jupiter.api.Assertions.assertFalse; |
| 25 | +import static org.junit.jupiter.api.Assertions.assertTrue; |
| 26 | + |
| 27 | +public class Example { |
| 28 | + public static void main(String[] args) { |
| 29 | + // Create a new Enforcer using the model path. The default role manager is used initially. |
| 30 | + Enforcer e = new Enforcer("examples/rbac_model_with_sessions.conf"); |
| 31 | + |
| 32 | + // Manually set an adapter for the policy. |
| 33 | + FileAdapter a = new FileAdapter("examples/rbac_policy_with_sessions.csv"); |
| 34 | + e.setAdapter(a); |
| 35 | + |
| 36 | + // Use our custom role manager. |
| 37 | + SessionRoleManager rm = new SessionRoleManager(10); |
| 38 | + e.setRoleManager(rm); |
| 39 | + |
| 40 | + // If our role manager relies on Casbin policy (e.g., reading "g" policy rules), |
| 41 | + // we need to set the role manager before loading the policy. |
| 42 | + e.loadPolicy(); |
| 43 | + |
| 44 | + // Current role inheritance tree (Time ranges shown in parentheses): |
| 45 | + // delta echo foxtrott |
| 46 | + // \ / \ / |
| 47 | + // (0-20) \ (5-15) / \ (10-20) / (10-12) |
| 48 | + // \ / \ / |
| 49 | + // bravo charlie |
| 50 | + // \ / |
| 51 | + // (0-10) \ / (5-15) |
| 52 | + // \ / |
| 53 | + // alpha |
| 54 | + |
| 55 | + // Test permissions for different time points |
| 56 | + assertTrue(e.enforce("alpha", "data1", "read", "00")); |
| 57 | + assertTrue(e.enforce("alpha", "data1", "read", "05")); |
| 58 | + assertTrue(e.enforce("alpha", "data1", "read", "10")); |
| 59 | + assertFalse(e.enforce("alpha", "data1", "read", "15")); |
| 60 | + assertFalse(e.enforce("alpha", "data1", "read", "20")); |
| 61 | + |
| 62 | + assertFalse(e.enforce("alpha", "data2", "read", "00")); |
| 63 | + assertTrue(e.enforce("alpha", "data2", "read", "05")); |
| 64 | + assertTrue(e.enforce("alpha", "data2", "read", "10")); |
| 65 | + assertTrue(e.enforce("alpha", "data2", "read", "15")); |
| 66 | + assertFalse(e.enforce("alpha", "data2", "read", "20")); |
| 67 | + |
| 68 | + assertFalse(e.enforce("alpha", "data3", "read", "00")); |
| 69 | + assertFalse(e.enforce("alpha", "data3", "read", "05")); |
| 70 | + assertTrue(e.enforce("alpha", "data3", "read", "10")); |
| 71 | + assertFalse(e.enforce("alpha", "data3", "read", "15")); |
| 72 | + assertFalse(e.enforce("alpha", "data3", "read", "20")); |
| 73 | + } |
| 74 | +} |
| 75 | + |
| 76 | +``` |
0 commit comments