cari
Rumahhujung hadapan webtutorial jsNgSysV.A Serious Svelte InfoSys: peraturan dan Log Masuk Firebase D/b

NgSysV.A Serious Svelte InfoSys: Firebase D/b rules and Login

Siri siaran ini diindeks di NgateSystems.com. Anda akan temui kemudahan carian kata kunci yang sangat berguna di sana juga.

Semakan terakhir: Nov '24

1. Pengenalan

Apabila anda mencipta pangkalan data Firestore pertama anda dengan bantuan pos 2.3, anda mungkin ingat bahawa anda ditanya sama ada anda mahu menggunakan peraturan "pengeluaran" atau "ujian". Cadangan pada masa itu ialah peraturan "ujian" harus dipilih. Jika anda telah menggunakan tab "peraturan" pada halaman Firestore dalam konsol Firebase pada ketika ini, anda akan mendapati peraturan anda ditetapkan kepada sesuatu seperti:

match /{document=**} {
  allow read, write: if request.time 



<p>Di sini, Google telah mencipta peraturan lalai yang menggunakan cap masa untuk membenarkan akses baca dan tulis ke pangkalan data anda selama 30 hari dari hari anda menciptanya. Itu tidak mungkin menjadi apa yang anda mahukan sekarang (dan Google akan mengomel anda untuk mengubahnya, bagaimanapun). Jadi, sudah tiba masanya untuk mengetahui lebih lanjut tentang peraturan Firestore dan cara anda boleh menggunakannya untuk memastikan pangkalan data anda selamat.</p>

<h3>
  
  
  Peraturan Pangkalan Data
</h3>

<p>"peraturan" Firestore membenarkan anda mengehadkan akses baca dan tulis kepada koleksi pangkalan data, dengan merujuk kepada objek permintaan Firebase yang dihantar kepada "pengendali peraturan" Firestore apabila panggilan pangkalan data dibuat. Objek ini mengandungi, antara lain, butiran pengguna yang membuat permintaan, jenis operasi yang dilakukan dan masa semasa. Jika anda ingin melihat senarai penuh hartanah, chatGPT dengan senang hati akan membekalkannya. </p>

<p>Untuk mendapatkan akaun penuh sintaks peraturan Firestore, mungkin lebih baik jika saya merujuk anda kepada dokumen Google sendiri di Bermula dengan Peraturan Firestore. Untuk tujuan sekarang, saya akan menumpukan perhatian pada keperluan segera untuk pangkalan data lalai yang telah dibuat oleh siri siaran ini.</p>

<p>Untuk melihat peraturan pangkalan data dalam tindakan, cuba gunakan tab "peraturan" pada halaman Firestore dalam konsol Firebase anda untuk menukar peraturan anda kepada:<br>
</p>

<pre class="brush:php;toolbar:false">    match /{document=**} {
      allow read: if true;
      allow write: if request.time 



<p>Peraturan ini hanya membenarkan akses tulis kepada dokumen dalam pangkalan data anda jika masanya lebih awal daripada 1 Jan 2000. Jadi, melainkan anda sedang berjalan dalam mesin masa, anda kini tidak akan dapat mencipta yang baharu dokumen.</p>

<p>Klik butang "Terbitkan" untuk menghidupkan peraturan baharu (anda boleh mengabaikan mesej dengan selamat yang mengatakan bahawa penerbitan mungkin mengambil sedikit masa untuk berkuat kuasa - dalam praktiknya kelewatan nampaknya adalah minimum), dan lihat cara apl web anda bertindak balas </p>

<p>Mulakan pelayan pembangun anda dan lancarkan apl web di http://localhost:5173. Apabila anda cuba menambah produk baharu, anda tidak seharusnya terlalu terkejut apabila anda menerima halaman "500: Ralat Dalaman". Apabila anda pergi ke sesi terminal anda untuk menyiasat punca, anda akan melihat mesej berikut:<br>
</p><pre class="brush:php;toolbar:false">match /{document=**} {
  allow read, write: if request.time 



<p>Sekarang anda sudah faham cara peraturan Firestore berfungsi, anda boleh mula memikirkan cara anda boleh menggunakan ini pada halaman paparan produk dan penyelenggaraan produk yang anda buat dalam Post 3.1.</p>

<p>Seperti yang anda ingat, ini menawarkan dua laluan seperti berikut:</p>

  • laluan "paparan-produk" di localhost:5173/products-display yang membolehkan pengguna membaca semua dokumen daripada koleksi produk dan
  • laluan "penyelenggaraan produk" di localhost:5173/products-maintenance yang membolehkan pengguna menulis dokumen baharu pada koleksi.

Andaiannya ialah walaupun anda berbesar hati untuk membenarkan sesiapa sahaja membaca dokumen produk menggunakan laluan "paparan-produk", anda hanya mahu diizinkan individu menjadi dapat menambah produk baharu menggunakan laluan "penyelenggaraan produk".

Individu akan dibenarkan dengan mengeluarkan gabungan "id pengguna/kata laluan" yang boleh mereka gunakan untuk "log masuk" ke apl web. Prosedur ini akan mewujudkan keadaan "auth" yang berterusan pada peranti klien pengguna yang menjadi sebahagian daripada objek permintaan Firebase yang dihantar kepada pemprosesan peraturan Firestore apabila pengguna cuba mengakses pangkalan data.

Kemudian, jika anda menetapkan peraturan Firestore seperti berikut:

    match /{document=**} {
      allow read: if true;
      allow write: if request.time 



<p>hanya pengguna "log masuk" akan dapat menulis ke halaman "produk". </p>

<p>Sekarang anda hanya perlu tahu cara menulis halaman "log masuk" untuk mencipta keadaan pengesahan. Sila baca terus!</p>

<h3>
  
  
  2. Log Masuk Firebase
</h3>

<p>Dalam skrin log masuk, bakal pengguna sistem diminta memberikan pengecam peribadi (biasanya alamat e-mel) dan kata laluan yang berkaitan. </p>

<p>Sistem kemudiannya menyemak pengecam dan kata laluan pengguna terhadap senarai selamat kelayakan yang diketahui. Dalam Firebase, anda akan menemui senarai ini dalam konsol Firebase projek anda di bawah tab "Bina -> Pengesahan -> Pengguna". Sila lihat ini. Ambil peluang untuk mendaftarkan alamat e-mel ujian dan kata laluan (pendaftaran "program" juga boleh dilakukan tetapi tidak dilindungi di sini). Perhatikan "medan UID Pengguna" yang diperuntukkan oleh Firebase kepada pendaftaran. Ini ialah versi alamat e-mel yang disulitkan yang unik. Seperti yang anda akan lihat sebentar lagi, ini membentuk elemen penting dalam mekanisme keselamatan Firebase. Perhatikan juga bahawa skrin menyediakan kemudahan untuk memadam akaun dan menukar kata laluan.</p>

<p>Semasa anda berada di sini, lihat tab "Kaedah log masuk" pada skrin "Pengesahan". Gabungan e-mel/kata laluan atau akaun Google ditawarkan. Saya syorkan anda hanya mendayakan pilihan e-mel/kata laluan pada peringkat ini. </p>

<p>Sekarang buat skrin log masuk. Kod sampel yang ditunjukkan di bawah sangat ringkas (dan kebanyakannya adalah penggayaan!):<br>
</p>

<pre class="brush:php;toolbar:false">[FirebaseError: Missing or insufficient permissions.] {
  code: 'permission-denied',
  customData: undefined,
  toString: [Function (anonymous)]
}

Buat folder laluan baharu dan fail page.svelte untuk skrip log masuk dan log keluar. Tetapi jangan cuba menjalankannya lagi kerana saya perlu memberitahu anda tentang beberapa bahagian lagi!

Perhatikan bahawa fail ini kini mengimport pembolehubah pengesahannya daripada fail src/lib/utilities/firebase-client.js pusat. Di dalam ini, apl web membentangkan kunci konfigurasi firebase untuk memastikan Firebase diberi kuasa untuk membuat objek pengesahan. Berikut ialah versi terkini src/lib/utilities/firebase-client.js yang melakukan perkara ini.

match /{document=**} {
  allow read, write: if request.time 



<p>Memandangkan pembolehubah apl, auth dan db yang dieksport di sini diperlukan secara meluas dalam apl web, banyak kod disimpan dengan menjananya di lokasi pusat.  </p>

<p>Tetapi beberapa keping "bling" di sini memerlukan penjelasan.</p>

<p>Pertama, anda akan ambil perhatian bahawa saya tidak lagi mengekodkan sifat firebaseConfig seperti apiKey <strong>secara langsung</strong> dalam kod tetapi saya merujuk parameter Vite yang telah saya takrifkan dalam fail .env projek (fail atau folder dengan "." menandakan bahawa ia adalah data "sistem"). Ini dia:<br>
</p>

<pre class="brush:php;toolbar:false">    match /{document=**} {
      allow read: if true;
      allow write: if request.time 



<p>Inti fail .env adalah untuk meletakkan kunci firebaseConfig anda dalam fail yang tidak mengandungi kod aplikasi. Ini menjadikannya lebih mudah untuk anda menguruskan keselamatan mereka. Tetapi mari letakkan perkara ini di sebelah pihak buat masa ini supaya anda boleh menumpukan perhatian kepada perkara yang lebih penting. Saya telah menambah nota pada penghujung siaran ini yang saya harap akan menerangkan segala-galanya.</p>

<p>Ciri kedua yang mungkin membingungkan anda ialah apl const = !getApps().length ? initializeApp(firebaseConfig): getApp(); barisan. Ini adalah contoh pernyataan "ternary" Javascript (dapatkan chatGPT untuk menerangkan cara ia berfungsi, jika anda tidak pernah bertemu ini sebelum ini). Kesannya ialah :</p>

  • Mulakan apl Firebase hanya jika tiada apl hadir dalam persekitaran Firebase pada masa ini. Apl web akan merujuk firebase-client.js dengan kerap semasa sesi pengguna dan initializeApp() gagal jika apl sudah wujud
  • Jika tidak, dapatkan semula apl sedia ada.

Kembali ke arus perdana sekarang, kesan daripada semua ini ialah, apabila log masuk berjaya, Firebase mencipta objek "pengesahan" untuk pengguna yang disahkan dan tupai pergi dengan selamat dalam persekitaran penyemak imbas. Oleh itu, Firebase boleh, secara automatik, menambah token pengesahan yang dijana daripada ini kepada setiap objek permintaan yang dihantar kepada permintaan perkhidmatan pangkalan data FireStore. Maklumat dalam token termasuk sifat seperti pengecam "uID pengguna" yang anda lihat sebelum ini dalam tab pengesahan Firebase. Akibatnya, Firestore boleh memutuskan cara menggunakan peraturan seperti allow write: if request.auth != null.

Ini semua bermakna aktiviti Firestore sebelah pelanggan berfungsi seperti jam - sebaik sahaja anda log masuk, peraturan Firestore mengurus semua kebimbangan keselamatan pangkalan data anda.

Tetapi ada halangan - halangan besar, sebenarnya. Objek "auth" yang dimasukkan oleh Firebase ke dalam persekitaran penyemak imbas tidak tersedia untuk halaman sisi pelayan seperti inventori-penyelenggaraan/ page.server.js.

Anda boleh menunjukkan ini dengan mudah.

  1. Terbitkan peraturan Firestore baharu yang membenarkan sesiapa sahaja membaca segala-galanya dalam koleksi produk tetapi pastikan hanya disahkan orang boleh menulis dokumen

    match /{document=**} {
      allow read, write: if request.time 
    
    
  2. Log masuk menggunakan laluan /login dan terima makluman "anda log masuk dengan Google".

  3. Lancarkan halaman /products-display. Kerana peraturan Firestore membenarkan sesiapa sahaja membaca semuanya. Halaman itu akan memaparkan senarai semasa produk berdaftar, sama seperti sebelum ini.

  4. Cuba tambah produk baharu dengan halaman penyelenggaraan produk. Agh! Ralat!

    match /{document=**} {
      allow read: if true;
      allow write: if request.time 



<p>Apa yang berlaku di sini ialah pembolehubah pengesahan "tupai" penyemak imbas dan selebihnya maklumat sesi Firebase induknya tidak tersedia untuk Firestore pada pelayan. Akibatnya request.auth tidak ditentukan di sana dan oleh itu peraturan Firestore gagal. </p>

<p>Kedudukannya ialah Google telah menolak untuk menyediakan Firebase dengan versi sisi pelayan kemudahan pengurusan sesi yang sangat baik yang menjadikan kehidupan sangat menyeronokkan di pihak pelanggan. Pada masa ini, kod anda telah menggunakan Firestore <strong>Client</strong> API. Pada pelayan, apabila pangkalan data Firestore telah menetapkan "peraturan" pada koleksi yang merujuk pembolehubah sesi pengesahan Firebase, anda mesti menggunakan API Firestore <strong>Pentadbir</strong> dan bukannya API Pelanggan. Panggilan dalam API Pentadbiran tidak menyemak peraturan Firestore, jadi jangan gagal apabila pengesahan tidak ditentukan. Tetapi menggunakan API Pentadbiran mempunyai beberapa akibat:</p>

  • API Pentadbiran menggunakan "tandatangan panggilan" yang berbeza. Urutan fungsi API pentadbir yang anda gunakan untuk melaksanakan operasi pangkalan data baca/tulis bahagian pelayan secara amnya serupa dengan versi klien tetapi menggunakan sintaks yang berbeza.
  • API Pentadbiran memerlukan anda mendapatkan sebarang data pengguna yang mungkin anda perlukan dengan menggunakan kod yang anda tulis sendiri. Sesi Firebase pihak klien yang menyediakan objek auth.currentUser yang tidak ternilai dengan mudah untuk menghantar uID dan nama pengguna dsbnya tidak lagi tersedia di bahagian pelayan. Anda mesti membuat pengaturan anda sendiri untuk menyediakan pengganti.

Mengerang. Adakah terdapat alternatif? Dua siaran seterusnya menunjukkan:

  1. Bagaimana anda boleh mengatasi isu ini dengan membangunkan versi "mesra peraturan" apl web anda. Akibat daripada ini akan menjadi prestasi yang lebih lemah (kerana kod sebelah pelayan berjalan lebih pantas), keselamatan yang berkurangan (kerana pengesahan borang pihak pelanggan tidak selamat) dan prospek SEO yang berkurangan (kerana labah-labah web telah mengurangkan semangat untuk mengindeks kod pihak pelanggan)
  2. Sebagai alternatif, cara anda boleh berjuang dan membangunkan versi "pelayan-pelanggan" penuh apl web anda. Ini akan memberikan anda prestasi teratas, keselamatan dan SEO tetapi memerlukan anda berunding lagi gelombang teknologi untuk menutup jurang fungsi yang ditinggalkan oleh kehilangan susunan sesi pengguna Firebase

3. Kesimpulan

Ini adalah perjalanan yang sukar dengan pengakhiran yang tidak menggembirakan. Walau bagaimanapun, saya harap anda akan mempunyai tenaga untuk membaca.

Dari sudut pandangan anda sebagai pembangun, kod mesra Peraturan akan menjadi keseronokan yang sempurna kerana anda boleh nyahpepijat sepenuhnya menggunakan alat Inspektor penyemak imbas. Walaupun ia mempunyai had, seperti yang dinyatakan sebelum ini, ia boleh menjadi sangat memuaskan untuk banyak aplikasi mudah.

Sebagai alternatif, sementara versi pelayan pelanggan memberikan beberapa cabaran baharu, ia akan memberi anda pengalaman berharga dalam amalan pembangunan arus perdana dan memberikan prestasi yang benar-benar luar biasa.

Postscript - apakah maksud perniagaan ".env" ini?

Meskipun kelihatan aneh, ini semua bermula dengan perisian kawalan versi "Github" Microsoft. Ini ialah aplikasi web percuma yang membolehkan anda menyalin salinan sumber ke dalam repositori berasaskan web peribadi. Ia telah menjadi standard industri dan anda boleh mempelajarinya di Pengenalan lembut kepada git dan Github.

Tujuan utamanya adalah untuk menyepadukan aktiviti pasukan pembangun yang bekerja secara selari pada projek yang sama. Tetapi anda mungkin berminat untuk menggunakannya kerana, semasa pembangunan dan peningkatan berterusan projek peribadi anda, akan ada masa anda ingin meletakkan petikan "titik pemeriksaan" bagi kod anda di tempat yang selamat. .

Masalahnya ialah terlalu mudah untuk kunci sensitif yang dibenamkan dalam kod sumber disimpan secara tidak sengaja dalam repositori Git. Walaupun repositori boleh ditandakan sebagai "peribadi", keselamatan tidak terjamin.

Salah satu bahagian jawapannya ialah mengatur perkara supaya kunci projek dipegang secara berasingan daripada fail kod. Dengan cara ini mereka tidak perlu disalin ke Git. Meletakkan kunci Firebase anda dalam fail libutilitiesfirebase-client.js anda membantu di sini kerana ini bermakna kunci tidak lagi dikodkan ke dalam berbilang fail page.server.js. Tetapi masih terdapat kod dalam firebase-client.js pusat yang anda ingin simpan dalam repo anda. Menggunakan fail env membolehkan anda akhirnya merungkai kod daripada kunci. Walaupun kunci .env anda kekal dalam projek anda, fail ini tidak lagi perlu disalin ke repositori kod. Oleh itu, ia boleh ditambahkan pada fail .gitignore yang memberitahu Git fail mana yang hendak dikecualikan.

Anda akan mendapati bahawa Svelte mencipta fail .gitignore apabila ia memulakan projek anda dan ia sudah mengandungi butiran folder sistem Vite yang tidak mempunyai tempat dalam pusat pemeriksaan kod sumber. Untuk memastikan bahawa fail ".env" (dan sebarang sejarah pengeditan untuk fail) dikecualikan daripada semua komitmen Git, anda akan menambah entri berikut:

match /{document=**} {
  allow read, write: if request.time 



<p><em>Perhatikan bahawa, setelah anda melakukan ini, baris /.env dalam direktori VSCode Workspace anda akan menjadi "dikelabukan". Ini memberikan jaminan visual bahawa fail ini tidak akan didedahkan di web oleh komit Git.</em></p>


          

            
        

Atas ialah kandungan terperinci NgSysV.A Serious Svelte InfoSys: peraturan dan Log Masuk Firebase D/b. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Jenis data JavaScript: Adakah terdapat perbezaan antara penyemak imbas dan nodej?Jenis data JavaScript: Adakah terdapat perbezaan antara penyemak imbas dan nodej?May 14, 2025 am 12:15 AM

Jenis data teras JavaScript adalah konsisten dalam penyemak imbas dan node.js, tetapi ditangani secara berbeza dari jenis tambahan. 1) Objek global adalah tetingkap dalam penyemak imbas dan global di Node.js. 2) Objek penampan unik Node.js, digunakan untuk memproses data binari. 3) Terdapat juga perbezaan prestasi dan pemprosesan masa, dan kod perlu diselaraskan mengikut persekitaran.

Komen JavaScript: Panduan untuk menggunakan // dan / * * /Komen JavaScript: Panduan untuk menggunakan // dan / * * /May 13, 2025 pm 03:49 PM

JavaScriptusestWotypesofcomments: Single-line (//) danMulti-line (//)

Python vs JavaScript: Analisis Perbandingan untuk PemajuPython vs JavaScript: Analisis Perbandingan untuk PemajuMay 09, 2025 am 12:22 AM

Perbezaan utama antara Python dan JavaScript ialah sistem jenis dan senario aplikasi. 1. Python menggunakan jenis dinamik, sesuai untuk pengkomputeran saintifik dan analisis data. 2. JavaScript mengamalkan jenis yang lemah dan digunakan secara meluas dalam pembangunan depan dan stack penuh. Kedua -duanya mempunyai kelebihan mereka sendiri dalam pengaturcaraan dan pengoptimuman prestasi yang tidak segerak, dan harus diputuskan mengikut keperluan projek ketika memilih.

Python vs JavaScript: Memilih alat yang sesuai untuk pekerjaanPython vs JavaScript: Memilih alat yang sesuai untuk pekerjaanMay 08, 2025 am 12:10 AM

Sama ada untuk memilih Python atau JavaScript bergantung kepada jenis projek: 1) Pilih Python untuk Sains Data dan Tugas Automasi; 2) Pilih JavaScript untuk pembangunan front-end dan penuh. Python disukai untuk perpustakaannya yang kuat dalam pemprosesan data dan automasi, sementara JavaScript sangat diperlukan untuk kelebihannya dalam interaksi web dan pembangunan stack penuh.

Python dan javascript: memahami kekuatan masing -masingPython dan javascript: memahami kekuatan masing -masingMay 06, 2025 am 12:15 AM

Python dan JavaScript masing -masing mempunyai kelebihan mereka sendiri, dan pilihan bergantung kepada keperluan projek dan keutamaan peribadi. 1. Python mudah dipelajari, dengan sintaks ringkas, sesuai untuk sains data dan pembangunan back-end, tetapi mempunyai kelajuan pelaksanaan yang perlahan. 2. JavaScript berada di mana-mana dalam pembangunan front-end dan mempunyai keupayaan pengaturcaraan tak segerak yang kuat. Node.js menjadikannya sesuai untuk pembangunan penuh, tetapi sintaks mungkin rumit dan rawan kesilapan.

Inti JavaScript: Adakah ia dibina di atas C atau C?Inti JavaScript: Adakah ia dibina di atas C atau C?May 05, 2025 am 12:07 AM

Javascriptisnotbuiltoncorc; it'saninterpretedlanguagethatrunsonenginesoftenwritteninc .1) javascriptwasdesignedasalightweight, interpratedlanguageforwebbrowsers.2)

Aplikasi JavaScript: Dari Front-End ke Back-EndAplikasi JavaScript: Dari Front-End ke Back-EndMay 04, 2025 am 12:12 AM

JavaScript boleh digunakan untuk pembangunan front-end dan back-end. Bahagian depan meningkatkan pengalaman pengguna melalui operasi DOM, dan back-end mengendalikan tugas pelayan melalui Node.js. 1. Contoh front-end: Tukar kandungan teks laman web. 2. Contoh backend: Buat pelayan Node.js.

Python vs JavaScript: Bahasa mana yang harus anda pelajari?Python vs JavaScript: Bahasa mana yang harus anda pelajari?May 03, 2025 am 12:10 AM

Memilih Python atau JavaScript harus berdasarkan perkembangan kerjaya, keluk pembelajaran dan ekosistem: 1) Pembangunan Kerjaya: Python sesuai untuk sains data dan pembangunan back-end, sementara JavaScript sesuai untuk pembangunan depan dan penuh. 2) Kurva Pembelajaran: Sintaks Python adalah ringkas dan sesuai untuk pemula; Sintaks JavaScript adalah fleksibel. 3) Ekosistem: Python mempunyai perpustakaan pengkomputeran saintifik yang kaya, dan JavaScript mempunyai rangka kerja front-end yang kuat.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma