Hi All, I have posted this question at the SpringSource NoSQL forum... http://forum.springsource.org/showthread.php?110318-Modeling-Direction.BOTH-Relationships-with-RelatedToVia-element-classes-on-Neo4J... I decided to learn by modifying the my-restaurants-social example by adding an RBAC implementation for applications...
---- I must say that the project is looking amazing!!! Congratulations Spring team and Neo4J team to bring this together... I must say I was already in love with NoSQL using MongoDB, but Graph Databases with Neo4J is just a piece of art!!! After watching the presentation about Spring Data Graph, I must say I was hooked after I saw the term "Polyglot Persistence" and I decided to give this a try!!! Suppose I have an RBAC model such that users are granted action permissions to applications... The questions I'd like to answer about it is as follows: 1. Which permissions a user have been granted to a set of applications? 2. Which users have certain action permissions to an application? User <---> Permission <---> Application By reading the documentation, I thought I could use a @Direction.BOTH implementation of a @RelationshipEntity using a @RelatedToVia aggregation on my User @NodeEntity... Here's the code snippet for User... Code: @NodeEntity public class User { @Indexed private String id; @Indexed private String username; @RelatedToVia(type = "grantedPermissions", Direction.BOTH, elementClass = Permission.class) Iterable<Permission> permissions; public Iterable<Permission> getPermissions() { return this.permissions; } ... ... } The implementation of the Application @NodeEntity... At this point, I decided to paste the same code, but with a different property name and same "type" value for the annotation @RelatedToVia using @Direction.BOTH... Code: @NodeEntity public class Application { @Indexed private String id; @Indexed private String name; ... ... @RelatedToVia(type = "grantedPermissions", Direction.BOTH, elementClass = Permission.class) Iterable<Permission> permittedUsers; public Iterable<Permission> getPermittedUsers() { return this.permittedUsers; } } Now here are the questions for the implementation Permission as @RelationshipEntity... 1. Can I express the @StartNode and the @EndNode in the same property on a @RelationshipEntity? 2. Given the "public enum Action { CREATE, VIEW, EDIT, DELETE }", can I have a set of ENUMs as a @RelationshipEntity property? Here's the implementation of the @RelationshipEntity... Code: @RelationshipEntity public class Permission { @StartNode @EndNode private User user; @EndNode @StartNode private Application application; private Set<Action> actions; public Permission() { } public void addAction(Action action) { this.actions.add(action); } } Would this work? I'm still setting up my environment and I'm adding this to the my-restaurants-social application based on the Neo4J presentation... Thanks Marcello _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user