Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :-dynamic subject/1.
- :-dynamic access/2.
- :-dynamic object/1.
- :-dynamic role/2.
- object(o2).
- object(o4).
- object(o6).
- object(o8).
- subject(s1).
- subject(s3).
- subject(s5).
- subject(s7).
- subject(s9).
- access(s1, o2).
- access(s3, o2).
- access(s3, s1).
- access(s3, s5).
- access(s5, o4).
- access(s7, o6).
- access(s7, o8).
- access(s7, s1).
- access(s7, s9).
- access(s9, o8).
- role(s1, user_read_write).
- role(s3, user_read_write).
- role(s5, user_read).
- role(s7, admin).
- role(s9, user_read).
- roles(admin).
- roles(user_read_write).
- roles(user_read).
- show_roles:-
- forall(role(S, X), (write("Subject "), write(S), write(" - "), write(X), write("\n"))).
- show_access:-
- forall(access(S, Y), (write("Subject "), write(S), write(" -> "), write(Y), write("\n"))).
- add_access(S, O):-
- not(object(O)), not(subject(O)), write("Such object or subject doesn't exist\n");
- not(subject(S)), write("Such subject doesn't exist\n");
- access(S, O), write("Such access exists\n");
- asserta(access(S, O)), write("Access was created\n").
- delete_access(S, O):-
- not(object(O)), not(subject(O)), write("Such object or subject doesn't exist\n");
- not(subject(S)), write("Such subject doesn't exist\n");
- not(access(S, O)), write("Such access doesn't exist\n");
- retractall(access(S, O)), write("Access was deleted").
- delete_object(O):-
- not(object(O)), write("Such object doesn't exist.\n");
- retractall(object(O)), write("Object "), write(O), write(" was deleted\n").
- delete_subject(S):-
- not(subject(S)), write("Such subject doesn't exist.\n");
- retractall(subject(S)), write("Subject"), write(S), write(" was deleted\n").
- create_object(O):-
- subject(O), write("There is a subject with such name\n");
- object(O), write("There is an object with such name\n");
- asserta(object(O)), write("Object "), write(O), write(" was created.\n").
- create_subject(O):-
- subject(O), write("There is a subject with such name\n");
- object(O), write("There is an object with such name\n");
- asserta(subject(O)), write("Object "), write(O), write(" was created.\n").
- try_to_read(S, O):-
- not(object(O)), not(subject(S)), write("There is no such subject or object\n");
- not(role(S, user_read_write)), not(role(S, user_read)), not(role(S, user_read)), write("This subject can't read this object\n");
- access(S, O).
- try_to_write(S, O):-
- not(object(O)), not(subject(S)), write("There is no such subject or object\n");
- not(role(S, user_read_write)), not(role(S, user_read)), write("This subject can't read this object\n");
- access(S, O).
- try_to_copy(S, O):-
- not(object(O)), not(subject(S)), write("There is no such subject or object\n");
- not(role(S, admin)), write("This subject can't read this object\n");
- access(S, O).
- delete_role(S, R):-
- not(subject(S)), write("Such subject doesn't exist\n");
- not(roles(R)), write("Such role doesn't exist\n");
- not(role(S,R)), write("Subject has another role");
- retract(role(S, R)), write("Role was deleted\n").
- add_role(P, S, R):-
- not(subject(P)), write("Such initiator doesn't exist\n");
- not(subject(S)), write("Such subject doesn't exist\n");
- not(roles(R)), write("Such role doesn't exist\n");
- (R == admin), not(role(P, admin)), write("Only admins can give role of admin\n");
- (R == user_read_write), not(role(P, user_read_write)),not(role(P, admin)), write("Only admin or user_read_write can give role of user_read_write\n");
- (R == user_read; R == user_read_write), role(S, admin), write("Request was denied because this subject has a stronger role");
- (R == user_read), role(S, user_read), write("Subject already has user_read role\n");
- (R == user_read_write), role(S, user_read_write), write("Subject alredy has user_read_write role\n");
- (R == admin), role(S, admin), write("Subject already has admin role\n");
- (R == admin, (role(S, user_read); role(S, user_read_write))), retractall(role(S, _)), asserta(role(S, R)), write("Role has been added");
- asserta(role(S, R)), write("Role has been added\n").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement