Yetkilendirme (Authorization)

Birçok yönetim paneli uygulamasında bazı alanları sınırlamak için farklı rollere veya izinlere sahip kullanıcılara ihtiyacınız olacaktır. Olobase Admin bu özelliği birkaç düzeyde destekler.

Arka Uç Önceliği

Kullanıcıya ait yetkileri alın

Devam etmeden önce bu kılavuzun ilgili kimlik doğrulama bölümüne göz atmış olmanız tavsiye edilir. Bahsedilen bölüm kullanıcı kimlik doğrulaması ve kullanıcı bilgilerinin alınması hakkında bilmeniz gereken her şeyi içerir.

Kimlik doğrulama kılavuzunda gördüğünüz gibi her kimlik doğrulama sağlayıcısının belirli bir getPermissions() yöntemi uygulaması gerekir. Bu rol, checkAuth() sağlayıcı yöntemi aracılığıyla API tarafından döndürülen geçerli bir kullanıcı nesnesinden izinleri alır. Bu izinler array dizisi olarak döner. Yetkiler create_book gibi düşük seviyeli özel bir izinden editor olarak daha genel bir role kadar istediğiniz herhangi bir şey olabilir. İhtiyacınız olan uygun ayrıntı düzeyini bulmak size kalmış. Örneğin, genel rol tabanlı olarak ["editor", "author"] veya daha ayrıntılı izin tabanlı olarak ["list_author", "show_author", "list_book", "show_book", "create_book"] gibi hayal edebiliriz.

Kaynaklar

Her kaynağın her eylemi için belirli erişim izinleri tanımlayabilirsiniz. Bu izinler uygulamanın tamamına yansıtılır. Özellikle getResourceLink() yardımcısı kaynağa özel menülerin yanı sıra, ilgili kaynağa bağlı tüm CRUD eylem tuşlarını gizler veya gösterir. Bunun için ilgili kaynak nesnesine yeni bir izin tanımlamanız yeterlidir:

src/resources/index.js

export default [
  {
    name: "reviews",
    icon: "mdi-comment",
    permissions: [
      { name: "admin", actions: ["list", "show", "create", "edit", "delete"] },
      { name: "editor", actions: ["list", "show", "edit"] },
      { name: "author", actions: ["list", "show", "edit", "delete"] },
    ],
  },
]

Permissions özelliği basit bir dize veya nesne dizisidir. Bu iznin tüm eylemlere uygulanmasını istiyorsanız basit dize kullanın. Nesne biçimi, kaynakların her eylemi için daha ayrıntılı izin tanımlamanıza olanak tanır. Kullanıcı bu izne sahip olduğunda izin adı için name ve izin verilen eylemlerin listesi için actions kullanmanız yeterlidir.

Varsayılan Davranış

Varsayılan olarak, hiçbir izin ayarlanmadıysa kimliği doğrulanmış tüm kullanıcılar bu kaynağın tüm işlemlerine erişebilir.

Hariç Tutulan Eylemler

Genel işlemler actions veya istisna except özellikleri, yalnızca hariç tutulan işlemler için permissions seçeneğine göre önceliklendirilir. Dolayısıyla, eylemleri veya hariç özellikleri kullanırsanız, hariç tutulan eylemlere yönelik belirli izinlerin hiçbir etkisi olmayacaktır.

Gelişmiş Kullanım

Yukarıdaki kaynak izin API'sinin sizin için yeterli olmaması durumunda, yine de Olobase Admin seçeneklerine belirli bir canAction fonksiyonu iletebilirsiniz; bu, izin eylemi filtrelemesi için daha fazla kontrole sahip olmanızı sağlar. Kullanıcı izinlerine göre aktif olması gerekip gerekmediğini bilmek için her kaynak bağlantısında (admin.getResourceLink veya admin.getResourceLinks kullanıyorsanız) veya herhangi bir kaynak CRUD eylem tuşunda yürütülür.

Bu özelleştirilebilir fonksiyon, 3 özelliğe sahip bir params nesnesini alır:

Argüman Açıklama
resource İlgili kaynağın adı
action İstenen eylem
can Kimliği doğrulanmış kullanıcıdan doğrudan izin alma olanağı sağlayan bir yardımcı işlev

src/plugins/admin.js

import OlobaseAdmin from "olobase-admin";
//...
let admin = new OlobaseAdmin(import.meta.env);
/**
 * Install admin plugin
 */
export default {
  install: (app, http, resources) => {
    admin.setOptions({
      //...
      canAction: ({ resource, action, can }) => {
        if (can(["admin"])) {
          return true;
        }
        // any other custom actions on given resource and action...
      },
      //...
    });
    admin.init();
    OlobaseAdmin.install(app); // install layouts & components
  },
};

Geçersiz Kılma (Overriding) veya Varsayılan

Eğer geri çağırma geçerli bir boolean değeri döndürürse, ilgili kaynakta belirlenen izin değeri ne olursa olsun eylem geçerli olarak kabul edilecektir. Hiçbir şey döndürülmezse varsayılan davranış yürütülür.

Yardımcılar

Olobase Admin size, mevcut kullanıcının yeteneklere sahip olup olmadığını hızlı bir şekilde test etmenize olanak tanıyan, her yerde kullanabileceğiniz global bir admin.can() yardımcı metodu sunar. Kimliği doğrulanmış kullanıcı bunlardan birine sahipse, test etmek ve true değerini döndürmek istediğiniz izinlerin listesi olan bir array dizeyi alır.

<template>
  <va-form :id="id" :item="item">
    <va-text-input source="isbn" v-if="admin.can(['isbn_edit'])"></va-text-input>
  </va-form>
</template>
<script>
export default {
  inject: ['admin'],
  method() {
    onSubmit() {
      if (this.admin.can(["book_edit"])) {

      }
    },
  },
};
</script>

OR ve && Durumları

Takip eden örnekte olduğu gibi || ve && kombinasyonlarını kullanarak, kenar çubuğundaki bağlantıları izinlere göre dizinin içinde kolayca gizlemek veya göstermek için kullanabilirsiniz:

src/_nav.js

export default  {

  build: async function(t, admin) {

    const user = await admin.can(["user"]);
    const adminUser = await admin.can(["user", "admin"]);

    return [
      {
        icon: "mdi-view-dashboard",
        text: i18n.t("menu.dashboard"),
        link: "/",
      },
      ...admin.getResourceLinks(["publishers", "authors", "books", "reviews"]),
      adminUser.can(["admin"]) && {
        icon: "mdi-settings",
        text: i18n.t("menu.settings"),
        link: "/settings",
      },
      (user || adminUser.can(["admin", "editor"])) && {
        icon: "mdi-message",
        text: i18n.t("menu.feedback"),
        link: "/feedback",
      },
      { icon: "mdi-help-circle", text: i18n.t("menu.help"), link: "/help" },
    ];

  } // end func

} // end class