File server with role-based user access control
Kaisanlahti, Sami (2021)
Kaisanlahti, Sami
2021
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2021121125318
https://urn.fi/URN:NBN:fi:amk-2021121125318
Tiivistelmä
Tämän opinnäytetyön tarkoitus oli kehittää tiedostojenjakamisjärjestelmä toimeksiantajan sisäiseen käyttöön. Projekti toteutettiin verkkopalveluna, joka koostui kahdesta osasta: selainsovelluksesta ja tietokantaa operoivasta palvelimesta. Parhaat jatkokehitysmahdollisuudet pyrittiin takaamaan käyttämällä tämän hetken suosituimpia verkkoteknologioita. Raportissa keskitytään kuvaamaan palvelun kehitysprosessista, ja selittämään käyttöoikeuksien ja tiedostonjakamisominaisuuksien käytännön toteutusta.
Selainsovelluksen teknologiaksi valittiin ReactJS, jonka avulla dynaamisen käyttöliittymän kehittäminen oli mahdollista. Palvelimen kanssa kommunikointia helpottamaan tuotiin React Query -kirjasto, jonka avulla myös käyttöliittymän välimuistin toteutus oli helppoa.
Palvelinjärjestelmä rakennettiin NodeJS-teknologian pohjalle käyttäen ExpressJS-runkokirjastoa ja tarvittavat järjestelmän tiedot tallennettiin MongoDB-tietokantaan. Käyttäjäntunnistus toteutettiin palvelimen kirjaamien sessioiden ja keksien (cookie) avulla. Sovellusrajapintoja suojaamaan ja käyttöoikeuksia säätelemään rakennettiin pääsynhallintajärjestelmä käyttämällä roolipohjaisen pääsynhallinnan periaatteita.
Toteutuksen tavoitteissa onnistuttiin ja toimiva sovellus saatiin kehitettyä. Kehitystyön jälkeen raportissa pohdittiin toteutuksen ongelmia ja jatkokehityksen mahdollisuuksia. Omatekoisen järjestelmän tekemisen havaittiin olevan toimiva, mutta suhteellisen pitkää kehitysaikaa vaativa vaihtoehto kaupallisille palveluille. Tekemisen tuloksena saatu tietotaito kuitenkin tunnistettiin suurena kehitystyön hyötynä. The purpose of this thesis project was to develop a file sharing system for internal use of the commissioner. The project was implemented as a web service consisting of two parts: a browser application and a server that operates a database. Popular modern web technologies were used to provide the best possibilities for further development. This thesis supplies a description of the application development process and explains the practical implementation of user access control and file sharing features.
The user interface was built as a dynamic single-page browser application using ReactJS. React Query library was brought in to facilitate the communication with the backend server. The backend server was built on NodeJS technology and implemented using the ExpressJS framework. MongoDB was used as the database to save the required system data and file information. User authentication was implemented using server-tracked sessions and session cookies. Role-based access control principles were used to build an access management system to protect the server API and to provide granular control over the transactions allowed in the system.
The goal of the implementation was met, and a working full stack application was successfully developed. After development, problems in the implementation were briefly analyzed, and various topics for further development were identified. In conclusion, developing systems and tools in-house instead of using available third-party applications on the market is a valid approach in certain scenarios, but the development time can be significant. However, building applications from the ground up allow developers to gain important knowledge for building more applications in the future.
Selainsovelluksen teknologiaksi valittiin ReactJS, jonka avulla dynaamisen käyttöliittymän kehittäminen oli mahdollista. Palvelimen kanssa kommunikointia helpottamaan tuotiin React Query -kirjasto, jonka avulla myös käyttöliittymän välimuistin toteutus oli helppoa.
Palvelinjärjestelmä rakennettiin NodeJS-teknologian pohjalle käyttäen ExpressJS-runkokirjastoa ja tarvittavat järjestelmän tiedot tallennettiin MongoDB-tietokantaan. Käyttäjäntunnistus toteutettiin palvelimen kirjaamien sessioiden ja keksien (cookie) avulla. Sovellusrajapintoja suojaamaan ja käyttöoikeuksia säätelemään rakennettiin pääsynhallintajärjestelmä käyttämällä roolipohjaisen pääsynhallinnan periaatteita.
Toteutuksen tavoitteissa onnistuttiin ja toimiva sovellus saatiin kehitettyä. Kehitystyön jälkeen raportissa pohdittiin toteutuksen ongelmia ja jatkokehityksen mahdollisuuksia. Omatekoisen järjestelmän tekemisen havaittiin olevan toimiva, mutta suhteellisen pitkää kehitysaikaa vaativa vaihtoehto kaupallisille palveluille. Tekemisen tuloksena saatu tietotaito kuitenkin tunnistettiin suurena kehitystyön hyötynä.
The user interface was built as a dynamic single-page browser application using ReactJS. React Query library was brought in to facilitate the communication with the backend server. The backend server was built on NodeJS technology and implemented using the ExpressJS framework. MongoDB was used as the database to save the required system data and file information. User authentication was implemented using server-tracked sessions and session cookies. Role-based access control principles were used to build an access management system to protect the server API and to provide granular control over the transactions allowed in the system.
The goal of the implementation was met, and a working full stack application was successfully developed. After development, problems in the implementation were briefly analyzed, and various topics for further development were identified. In conclusion, developing systems and tools in-house instead of using available third-party applications on the market is a valid approach in certain scenarios, but the development time can be significant. However, building applications from the ground up allow developers to gain important knowledge for building more applications in the future.