* Turkish language created for Docs. Belgeler için türkçe dil desteği oluşturuldu. * Turkish docs fix
6.1 KiB
Erişim Kontrol Listesi
Erişim Kontrol Listesi, Nocobase'deki izin kontrol modülüdür. Erişim Kontrol Listesinde rolleri, kaynakları kaydettikten ve karşılık gelen izinleri yapılandırdıktan sonra, rollerin izinlerini değerlendirebilirsiniz.
Kavram Açıklaması
- rol (
ACLRole
): izin kararının nesnesi - Kaynak (
ACLResource
): Nocobase Erişim Kontrol Listesinde, kaynak genellikle Restful API'deki Resource'a kavramsal olarak benzer olabilen bir veritabanı tablosuna karşılık gelir. - İşlem: "Oluştur", "oku", "güncelle", "sil" vb. gibi kaynaklar üzerindeki işlemler.
- Strateji (
ACLAvailableStrategy
): Genellikle her rolün varsayılan kullanıcı izinlerini tanımlayan kendi izin stratejisi vardır. - Grant:
Action
a rol erişimi vermek içinACLRole
örneğindegrantAction
işlevini çağırın. - Kimlik Doğrulama:
ACL
örneğindecan
işlevi çağrılır ve işlev tarafından döndürülen sonuç, kullanıcının kimlik doğrulama sonucudur.
sınıf yöntemi
constructor()
Bir ACL
örneği oluşturan oluşturucu.
import { ACL } from '@nocobase/database';
const acl = new ACL();
define()
Bir ACL rolü tanımlayın
Kullanım
define(options: DefineOptions): ACLRole
Tip
interface DefineOptions {
role: string;
allowConfigure?: boolean;
strategy?: string | AvailableStrategyOptions;
actions?: ResourceActionsOptions;
routes?: any;
}
Detaylar
role
- 角色名称
// Yönetici adında bir rol tanımlayın
acl.define({
role: 'admin',
});
allowConfigure
- Yapılandırma izinlerine izin verilip verilmeyeceğistrategy
- Rol İzin Politikası- Tanımlanan stratejinin kullanılacağını belirten, kullanılacak stratejinin adı olan bir
string
olabilir. AvailableStrategyOptions
için bu rol için yeni bir strateji tanımlanabilir, bkz.setAvailableActions()
.
- Tanımlanan stratejinin kullanılacağını belirten, kullanılacak stratejinin adı olan bir
işlemler
- Bir rol tanımlarken, rol için erişilebilir birişlemler
nesnesi iletebilirsiniz. Bundan sonra, kaynak izinlerini vermek için sıraylaaclRole.grantAction
çağrılır. Bkz.aclRole.grantAction
acl.define({
role: 'admin',
actions: {
'posts:edit': {}
},
});
// Diğer kullanım şekli
const role = acl.define({
role: 'admin',
});
role.grantAction('posts:edit', {});
getRole()
Rol adına göre kayıtlı rol nesnesini döndürür
Kullanım
getRole(name: string): ACLRole
removeRole()
Rol adına göre rolleri kaldırın
Kullanım
removeRole(name: string)
can()
Kimlik doğrulama işlevi
Kullanım
can(options: CanArgs): CanResult | null
Tip
interface CanArgs {
role: string; // Rol ismi
resource: string; // Kaynak Adı
action: string; // İşlem adı
}
interface CanResult {
role: string; // Rol ismi
resource: string; // Kaynak Adı
action: string; // İşlem adı
params?: any; // İzinler kaydedilirken gönderilen parametreler
}
Detaylar
can
yöntemi öncelikle rolün kayıt için ilgili Action
iznine sahip olup olmadığını belirleyecek ve değilse, rolün strategy
eşleşip eşleşmediğini belirleyecektir.
Çağrı null
döndürdüğünde, rolün izni olmadığını belirtir, aksi takdirde, rolün izne sahip olduğunu belirten bir CanResult
nesnesi döndürür.
Örnek
// Rolleri tanımlayın, izinleri kaydedin
acl.define({
role: 'admin',
actions: {
'posts:edit': {
fields: ['title', 'content'],
},
},
});
const canResult = acl.can({
role: 'admin',
resource: 'posts',
action: 'edit',
});
/**
* canResult = {
* role: 'admin',
* resource: 'posts',
* action: 'edit',
* params: {
* fields: ['title', 'content'],
* }
* }
*/
acl.can({
role: 'admin',
resource: 'posts',
action: 'destroy',
}); // null
use()
Kullanım
use(fn: any)
Ara katman yazılımlarına ara katman işlevleri ekleyin.
middleware()
@nocobase/server
içinde kullanım için bir ara katman işlevi döndürür. Bu ara yazılımı
kullandıktan sonra, @nocobase/server
, her istek işlenmeden önce izin kararı verecektir.
allow()
Kaynağı herkese açık hale getirin
Kullanım
allow(resourceName: string, actionNames: string[] | string, condition?: string | ConditionFunc)
Tip
type ConditionFunc = (ctx: any) => Promise<boolean> | boolean;
Detaylar
- resourceName - Kaynak Adı
- actionNames - kaynak işlem adı
- condition? - Konfigürasyon Etkili Koşullar
string
iletmek, tanımlanan koşulun kullanıldığını ve kayıt koşulununacl.allowManager.registerCondition
yöntemini kullandığını gösterir.acl.allowManager.registerAllowCondition('superUser', async () => { return ctx.state.user?.id === 1; }); // superUser durumu için users:list yetkilerini açar acl.allow('users', 'list', 'superUser');
- ConditionFunc'u ctx parametresiyle iletir ve sonucunu
boolean
olarak döndürür.// Kullanıcı kimliği 1 olduğunda, user:list'e erişebilirsiniz. acl.allow('users', 'list', (ctx) => { return ctx.state.user?.id === 1; });
Örnek
// users:login erişim yetkisi olanlar erişebilir.
acl.allow('users', 'login');
setAvailableActions()
Kullanım
setAvailableStrategy(name: string, options: AvailableStrategyOptions)
Kullanılabilir bir izin politikası kaydedin
Tip
interface AvailableStrategyOptions {
displayName?: string;
actions?: false | string | string[];
allowConfigure?: boolean;
resource?: '*';
}
Detaylar
- displayName - Politika Adı
- allowConfigure - Bu politikanın config source izni olup olmadığına bakılmaksızın, bunu
true
olarak ayarladıktan sonra,ACL
de birconfigResources
kaynağı olarak kaydolma iznini belirleme isteği bir geçiş döndürür. - actions - Politika içindeki işlemler listesi joker karakteri
*
destekler - resource - Politika içindeki kaynak tanımı joker karakteri
*
destekler