ad4929e48b
* Turkish language created for Docs. Belgeler için türkçe dil desteği oluşturuldu. * Turkish docs fix
233 lines
6.1 KiB
Markdown
233 lines
6.1 KiB
Markdown
# 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> | 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
|
||
|