Giter Site home page Giter Site logo

#ASK Role dan Permission about nodemi HOT 2 CLOSED

mamena2020 avatar mamena2020 commented on May 26, 2024
#ASK Role dan Permission

from nodemi.

Comments (2)

memcaliber avatar memcaliber commented on May 26, 2024 1

Mantap, Om.. terimakasih atas jawabannya 🙏

from nodemi.

Mamena2020 avatar Mamena2020 commented on May 26, 2024

@memcaliber Iya benar user-create adalah kata kerja kunci dalam C-R-U-D.
kamu bisa menggantinya dengan kata kunci yang lain, guna untuk membatasi akses dari current user yang lagi login dalam melakukan aksinya.
Saya biasanya menggunakan standart seperti dibawah

       "product-create",  // user yg memiliki akses untuk melakukan create / form untuk buat product - GET
       "product-stored",  // user yg memiliki akses untuk melakukan stored / aksi simpan product baru - POST
       "product-edit",   // user yg memiliki akses untuk melakukan edit / form untuk sunting product - GET
       "product-update",  // user yg memiliki akses untuk melakukan update / aksi perbarui product - PUT
       "product-delete", // user yg memiliki akses untuk melakukan delete  / aksi hapus product - DELETE
       "product-search" // user yg memiliki akses untuk melakukan search / cari data product - GET
       "product-view" // user yg memiliki akses untuk melakukan view / melihat data semua product - GET
       "product-show" // user yg memiliki akses untuk melakukan show / melihat detail product - GET

Penggunaan

Cara pengunaannya pertama daftarkan kata kunci aksesnya ke Permision

    const permissions = [
       "product-create",
       "product-stored",
       "product-edit",
       "product-update",
       "product-delete",
       "product-search",
       "product-show",
       "product-view",
   ]

    for (let permission of permissions) {
        await Permission.create({ name: permission })
    }

Buat Role

Kemudian buat role sesuai kebutuhan, misalnya si admin yang hanya dapat melihat product saja, tapi tidak bisa create baru, delete maupun update.

    await Role.create({ name: 'low_admin' }) // create role baru dengan nama 'low_admin'

Pasangkan Permission ke Role

Lalu pasangkan permission yang sudah dibuat ke role low_admin. sehingga user yang memiliki role low_admin hanya dapat memiliki akses view, show, dan search product saja.

  const permissions = [
       "product-view",
       "product-show",
       "product-search",
    ]

    const lowAdmin = await Role.findOne({ where: { name: "low_admin" } })

    if (lowAdmin) {
        await lowAdmin .assignPermissions(permissions) // memasangkan permission ke role
    }

Mengeset User Role

Setelah role dan permission sudah jadi untuk role low_admin. berikutnya tinggal memilih saja user mana yang mau di set sebagai role low_admin.

   // mengeset user tertentu dengan role low_admin
    await user.setRole("low_admin") // params is role id or name

Batasi User akses

Setelah itu, jangan lupa untuk setiap operasi C-R-U-D di controller, bisa dilindungi dari user yang tidak memilii akses, contoh kode dibawah current user yang tidak memiliki akses product-delete akan mendapat response forbidden status code.

   
   if (!GateAccess(user, ["product-delete"]))
   {
        return res.sendStatus(403) // return forbidden status code
   }
   // code to delete product here..... 

from nodemi.

Related Issues (4)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.