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
[email protected]
https://lists.neo4j.org/mailman/listinfo/user