Marcello, I have a question regarding your domain. Is the relationship really bidirectional?
I.e. are there permissions that go _from_ the application, _to_ the user? You really only need both if you have relationships that might be incoming and outgoing and you want to collect all of them. I.e. having User - follows -> User Then I can get all the social contacts of the user by using both, and its followers by using Direction.INCOMING and the people he follows by Direction.OUTGOING. I'm afraid the mixing of annotations you did in Permission does not work that way as for each field it has to be deterministic which annotation applies. I think you just have to use Direction.OUTGOING on user and Direction.INCOMING on Application if your Relationship goes that way (or the other way round if it goes from Application to User). Yes, you can have enums as properties (for both Node and Relationship-Entities), they are converted using the provided conversion service which hooks into Spring's Conversion facilities. Right now we don't support Set's or other collection types for non-enty values but that will come in the next SDG release. You could try to create an array of your enums. That should probably work. And then create the set on the fly when you access the field return new EnumSet<Action>.of(actions). Hope that helps, just ask if you have further questions. And thanks for the praise :) Cheers Michael Am 07.06.2011 um 09:28 schrieb Marcello de Sales: > 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 _______________________________________________ Neo4j mailing list User@lists.neo4j.org https://lists.neo4j.org/mailman/listinfo/user