Fileserver
Überblick
Der Fileserver basiert auf einem Kurs System. Die User haben jedoch keine Rechte sondern entweder die Schüler oder die Lehrer Rolle. Je nach Accounttyp sieht der User dann andere Sachen. Lehrer haben zum Beispiel Zugriff auf das Cloning Tool und Schüler nicht.
Überblick der Features
Das von uns erstellte Filesystem hat keine Permissions, deswegen muss die Zugriffsverwaltung von der Weboberfläche übernommen werden.
Das Filesystem ermöglicht jedoch trotzdem eine einfache Segregation von privaten und kursspezifischen Files. Außerdem ermöglicht es die Segregation zwischen den Files von Schülern. Jeder Schüler kann nur auf seine eigenen Dateien zugreifen und nicht auf die von seinen Mitschülern oder anderen Schülern.
Die automatisierte Ordnerverwaltung wird durch die oben angegeben Python Funktionen ( Verwendete Funktionen ) realisiert und sie sind deswegen in der Django App eingebunden
Filesystem
Das Filesystem ist in private und Kurs Dateien geteilt. Auf die privaten Dateien hat nur der jeweilige User Zugriff. Auf die Kurs Dateien hat wieder jeder Schüler nur auf seine eigenen Dateien Zugriff, aber der Kursleiter/Lehrer kann jegliche Schülerdateien einsehen.
So könnte das Filesystem eines Lehrers aussehen (er hat in jedem Folder den er sieht alle Rechte):
Im Kontrast dazu ist das zum Beispiel das Filesystem das ein Schüler sieht(grau heißt er kann nichts verändern):
Aufbau
Das Filesystem ist dann logisch in zwei Teile geteilt. In die User und die Course Files
files
│
├── users
│ ├── lorenz
│ │ └── project.gns3project
│ │
│ └── arthur
│ └── plf_vorbereitung.gns3project
│
└── courses
├── 21-22-4AX
│ └── plf_uebung.gns3project
│ └── lorenz
│ └── arthur
│ └── plf_uebung.gns3project
│
└── 22-23-5AX
└── matura_uebung.gns3project
└── arthur
└── matura_uebung.gns3project
Ablauf
Fileupload
Das ist der Ablauf eines Fileuploads
Filedownload
Das ist der Ablauf eines Fileuploads
Verwendete Funktionen
Pfad: namespaces/fileserver/views.py
add_user
def add_user(username, password, email, superuser=False):
user = get_user_model().objects.create_user(
username=username,
email=email,
password=password
)
if superuser:
user.is_superuser = True
user.is_staff = True
user.save()
os.mkdir(f"./files/users/{username}")
add_group
def add_group(name):
Group.objects.get_or_create(name=name)
os.mkdir(f"./files/courses/{name}")
add_user_to_group
def add_user_to_group(username, groupname):
my_group = Group.objects.get(name=groupname)
myuser = User.objects.get(username=username)
my_group.user_set.add(myuser)
os.mkdir(f"./files/courses/{groupname}/{username}")
delete_user
def delete_user(username):
get_user_model().objects.get(username=username).delete()
courses = os.listdir("./files/courses/")
for kurs in courses:
if os.path.exists(f"./files/courses/{kurs}/{username}"):
shutil.rmtree(f"./files/courses/{kurs}/{username}")
shutil.rmtree(f"./files/users/{username}")