Skip to content

Instantly share code, notes, and snippets.

@spellancer
Created March 30, 2014 08:23
Show Gist options
  • Select an option

  • Save spellancer/9869451 to your computer and use it in GitHub Desktop.

Select an option

Save spellancer/9869451 to your computer and use it in GitHub Desktop.
lab2 - inf. secure
# -*- coding: utf-8 -*-
# Нанян Саркис АК5-81
# Вариант 11, 5 субъектов 3 объекта
# Функция вывода списка файлов с правами
def sprint(sb,objects,ss=-1):
print "\nСписок файлов для пользователя %s: " % subjects[sb]
si = 0
while si<3:
#si = objects.index(i)
if ss !=-1:
si = ss
if matrix[sb][si] == 7:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, write, grant'
elif matrix[sb][si] == 6:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, write, --'
elif matrix[sb][si] == 5:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: read, -- , grant'
elif matrix[sb][si] == 4:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: read, -- , --'
elif matrix[sb][si] == 3:
print '\n Идентификатор объекта: ',si, ';', 'Объект: ', objects[si] ,'; ', 'Права: -- , write, grant'
elif matrix[sb][si] == 2:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , write, --'
elif matrix[sb][si] == 1:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , -- , grant'
elif matrix[sb][si] == 0:
print '\n Идентификатор объекта: ',si, ';','Объект: ', objects[si] ,'; ', 'Права: -- , -- , --'
if ss != -1:
si = 3
else:
si +=1
# Массив пользователей системы
subjects = ['Michael', 'Gabriel', 'Raphael', 'Uriel','Salaphiel']
# Массив объектов системы
objects = ['top_secret.doc', 'annual_report.doc', 'config.txt']
actions = {'read':4, 'write':2, 'grant':1}
# матрица доступа
matrix = [[7,7,7], [6,7,4], [4,7,5], [5,0,0], [0,4,0]]
auth = False
while not auth:
username = raw_input('Введите идентификатор пользователя: ')
if username in subjects:
print "Вход выполнен! %s, добро пожаловать в систему!" % username
auth = True
else:
print "Пользователь не найден! Попробуйте еще раз."
auth = False
# Вывод матрицы доступа:
"""
print ' ', objects[0], ' ', objects[1] , ' ', objects[2]
for i in subjects:
print '\n', i, ' ', matrix[subjects.index(i)][0], ' ', matrix[subjects.index(i)][1], ' ', matrix[subjects.index(i)] [2]
"""
#sb --идентификатор текущего пользователя
sb = subjects.index(username)
if auth:
sprint(sb,objects)
k = False
for i in matrix[sb]:
if i % 2 != 0:
k = True
while k:
print "\nЖелаете назначить новые права для какого-либо файла?"
rin = raw_input("yes/no: ")
if rin == 'yes':
print "Введите идентификатор файла для изменения прав: "
idf = input("0-2: ")
if matrix[sb][idf] % 2 !=0:
usern = raw_input("Введите имя пользователя, которому необходимо назначить права: ")
sbi = subjects.index(usern)
if usern in subjects:
sprint(sbi,objects,idf)
print "\nВведите необходимые права для назначения, разделяя их пробелами"
newpr = raw_input("read/write/grant: ")
newpr = newpr.split()
akeys = actions.keys()
# Новое значение для матрицы доступа
nvalue = 0
for j in newpr:
if j in akeys:
nvalue += actions[j]
matrix[sbi][idf] = nvalue
print "Вывести обновленный список файлов и прав?"
ch = raw_input ('yes/no: ')
if ch == 'yes':
sprint(sbi,objects,idf)
else:
print "Неверное имя пользователя!"
else:
print "Вы не можете изменять права для данного файла!"
elif rin =='no':
k = False
else:
print "Введите 'yes' или 'no'"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment