Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 4.04 KB | None | 0 0
  1. :-dynamic subject/1.
  2. :-dynamic access/2.
  3. :-dynamic object/1.
  4. :-dynamic role/2.
  5.  
  6. object(o2).
  7. object(o4).
  8. object(o6).
  9. object(o8).
  10.  
  11. subject(s1).
  12. subject(s3).
  13. subject(s5).
  14. subject(s7).
  15. subject(s9).
  16.  
  17. access(s1, o2).
  18.  
  19. access(s3, o2).
  20. access(s3, s1).
  21. access(s3, s5).
  22.  
  23. access(s5, o4).
  24.  
  25. access(s7, o6).
  26. access(s7, o8).
  27. access(s7, s1).
  28. access(s7, s9).
  29.  
  30. access(s9, o8).
  31.  
  32. role(s1, user_read_write).
  33. role(s3, user_read_write).
  34. role(s5, user_read).
  35. role(s7, admin).
  36. role(s9, user_read).
  37.  
  38. roles(admin).
  39. roles(user_read_write).
  40. roles(user_read).
  41.  
  42. show_roles:-
  43.     forall(role(S, X), (write("Subject "), write(S), write(" - "), write(X), write("\n"))).
  44. show_access:-
  45.     forall(access(S, Y), (write("Subject "), write(S), write(" -> "), write(Y), write("\n"))).
  46. add_access(S, O):-
  47.     not(object(O)), not(subject(O)), write("Such object or subject doesn't exist\n");
  48.    not(subject(S)), write("Such subject doesn't exist\n");
  49.     access(S, O), write("Such access exists\n");
  50.     asserta(access(S, O)), write("Access was created\n").
  51. delete_access(S, O):-
  52.     not(object(O)), not(subject(O)), write("Such object or subject doesn't exist\n");
  53.    not(subject(S)), write("Such subject doesn't exist\n");
  54.     not(access(S, O)), write("Such access doesn't exist\n");
  55.    retractall(access(S, O)), write("Access was deleted").
  56. delete_object(O):-
  57.    not(object(O)), write("Such object doesn't exist.\n");
  58.     retractall(object(O)), write("Object "), write(O), write(" was deleted\n").
  59. delete_subject(S):-
  60.     not(subject(S)), write("Such subject doesn't exist.\n");
  61.    retractall(subject(S)), write("Subject"), write(S), write(" was deleted\n").
  62. create_object(O):-
  63.    subject(O), write("There is a subject with such name\n");
  64.    object(O), write("There is an object with such name\n");
  65.    asserta(object(O)), write("Object "), write(O), write(" was created.\n").
  66. create_subject(O):-
  67.    subject(O), write("There is a subject with such name\n");
  68.    object(O), write("There is an object with such name\n");
  69.    asserta(subject(O)), write("Object "), write(O), write(" was created.\n").
  70. try_to_read(S, O):-
  71.    not(object(O)), not(subject(S)), write("There is no such subject or object\n");
  72.    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");
  73.     access(S, O).
  74. try_to_write(S, O):-
  75.     not(object(O)), not(subject(S)), write("There is no such subject or object\n");
  76.     not(role(S, user_read_write)), not(role(S, user_read)), write("This subject can't read this object\n");
  77.    access(S, O).
  78. try_to_copy(S, O):-
  79.    not(object(O)), not(subject(S)), write("There is no such subject or object\n");
  80.    not(role(S, admin)), write("This subject can't read this object\n");
  81.     access(S, O).
  82. delete_role(S, R):-
  83.     not(subject(S)), write("Such subject doesn't exist\n");
  84.    not(roles(R)), write("Such role doesn't exist\n");
  85.     not(role(S,R)), write("Subject has another role");
  86.     retract(role(S, R)), write("Role was deleted\n").
  87. add_role(P, S, R):-
  88.     not(subject(P)), write("Such initiator doesn't exist\n");
  89.    not(subject(S)), write("Such subject doesn't exist\n");
  90.     not(roles(R)), write("Such role doesn't exist\n");
  91.    (R == admin), not(role(P, admin)), write("Only admins can give role of admin\n");
  92.    (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");
  93.    (R == user_read; R == user_read_write), role(S, admin), write("Request was denied because this subject has a stronger role");
  94.     (R == user_read), role(S, user_read), write("Subject already has user_read role\n");
  95.     (R == user_read_write), role(S, user_read_write), write("Subject alredy has user_read_write role\n");
  96.     (R == admin), role(S, admin), write("Subject already has admin role\n");
  97.    (R == admin, (role(S, user_read); role(S, user_read_write))), retractall(role(S, _)), asserta(role(S, R)), write("Role has been added");
  98.    asserta(role(S, R)), write("Role has been added\n").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement