Skip to content

Instantly share code, notes, and snippets.

@MonkeyIsNull
Last active December 28, 2015 22:59
Show Gist options
  • Save MonkeyIsNull/7575854 to your computer and use it in GitHub Desktop.
Save MonkeyIsNull/7575854 to your computer and use it in GitHub Desktop.
Experimental work on a Vertical and Horizontal Access system
% Here's our set of users
% Mind you, fred has no access_levels, he's a user
% but he can't even logon
user(jon).
user(mary).
user(ed).
user(fred).
% access_level(rankNumber, name, create, read, modify)
access_level(0, jon, c, r, m).
access_level(0, ed, c, r, m).
access_level(0, mary, c, r, m).
access_level(1, jon, c, r, m).
access_level(1, ed, no, no, r).
access_level(1, mary, c, r, m).
access_level(2, jon, c, r, m).
access_level(2, mary, c, r, no).
access_level(3, mary, no, r, no).
access_level(3, jon, c, r, m).
access_level(4, jon, c, r, m).
access_level(5, jon, c, r, m).
access_level(6, jon, c, r, m).
document(doc1, 1).
document(doc2, 2).
document(doc3, 3).
document(doc4, 4).
document(doc5, 5).
document(doc6, 6).
can_read_document(User, Doc) :-
user(User),
document(Doc,Level),
access_level(Level, User, _, r, _).
can_logon(User) :- user(User), access_level(0, User, c, r, m).
% xtras are just an experiment
xtra_level(0, jon, c,r,no).
xtra_level(0, mary, c,r,m).
all_extras(Who) :- xtra_level(0, Who, B,Y,D).
% Job Levels (levelNum, name, create, run, readReport, modify)
job_level(1, jon, c, r, r, m).
job_level(2, jon, c, r, r, m).
job_level(3, jon, c, r, r, m).
job_level(4, jon, c, r, r, m).
job_level(5, jon, c, r, r, m).
job_level(6, jon, c, r, r, m).
job_level(1, mary, c, r, r, m).
job_level(2, mary, c, r, r, no).
job_level(3, mary, no, r, r, no).
job_level(4, mary, no, no, r, no).
job_level(1, ed, c, r, r, m).
job_level(2, ed, c, r, r, m).
job_level(3, ed, c, r, r, m).
job_level(4, ed, c, r, r, m).
% job(jobType, environment, job_level).
job(nagios_probes, dev, 1).
job(nagios_probes, prod, 2).
job(nagios_probes, db, 6).
job(nagios_probes, prod, 6).
job(crystal_reports, internal, 3).
job(crystal_reports, board, 6).
job(crystal_reports, db, 4).
can_run_job(Level, User, Job) :- job_level(Level, User, _, r, _, _),
job(Job, Env, Level).
can_read_job_report(Level, User, Job) :- job_level(Level, User, _, _, r, _),
job(Job, Env, Level).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment