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.
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.
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 olarak, hiçbir izin ayarlanmadıysa kimliği doğrulanmış tüm kullanıcılar bu kaynağın tüm işlemlerine erişebilir.
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.
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
},
};
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.
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>
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