# 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çin `ACLRole` örneğinde `grantAction` işlevini çağırın. * Kimlik Doğrulama: `ACL` örneğinde `can` 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. ```typescript import { ACL } from '@nocobase/database'; const acl = new ACL(); ``` ### `define()` Bir ACL rolü tanımlayın **Kullanım** * `define(options: DefineOptions): ACLRole` **Tip** ```typescript interface DefineOptions { role: string; allowConfigure?: boolean; strategy?: string | AvailableStrategyOptions; actions?: ResourceActionsOptions; routes?: any; } ``` **Detaylar** * `role` - 角色名称 ```typescript // Yönetici adında bir rol tanımlayın acl.define({ role: 'admin', }); ``` * `allowConfigure` - Yapılandırma izinlerine izin verilip verilmeyeceği * `strategy` - 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()`](#setavailableactions). * `işlemler` - Bir rol tanımlarken, rol için erişilebilir bir `işlemler` nesnesi iletebilirsiniz. Bundan sonra, kaynak izinlerini vermek için sırayla `aclRole.grantAction` çağrılır. Bkz. [`aclRole.grantAction`](./acl-role.md#grantaction) ```typescript 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** ```typescript 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** ```typescript // 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** ```typescript type ConditionFunc = (ctx: any) => Promise | 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şulunun `acl.allowManager.registerCondition` yöntemini kullandığını gösterir. ```typescript 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. ```typescript // Kullanıcı kimliği 1 olduğunda, user:list'e erişebilirsiniz. acl.allow('users', 'list', (ctx) => { return ctx.state.user?.id === 1; }); ``` **Örnek** ```typescript // 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** ```typescript 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 bir `configResources` 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