fix: acl write (#280)
This commit is contained in:
		
							parent
							
								
									571b077840
								
							
						
					
					
						commit
						2f6aeacbd8
					
				@ -7,6 +7,7 @@ describe('role resource api', () => {
 | 
			
		||||
  let app: MockServer;
 | 
			
		||||
  let db: Database;
 | 
			
		||||
  let role: Model;
 | 
			
		||||
 | 
			
		||||
  afterEach(async () => {
 | 
			
		||||
    await app.destroy();
 | 
			
		||||
  });
 | 
			
		||||
@ -30,6 +31,46 @@ describe('role resource api', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should grant resource by createRepository', async () => {
 | 
			
		||||
    const collectionManager = db.getRepository('collections') as CollectionRepository;
 | 
			
		||||
    await collectionManager.create({
 | 
			
		||||
      values: {
 | 
			
		||||
        name: 'c1',
 | 
			
		||||
        title: 'table1',
 | 
			
		||||
      },
 | 
			
		||||
      context: {},
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await collectionManager.create({
 | 
			
		||||
      values: {
 | 
			
		||||
        name: 'c2',
 | 
			
		||||
        title: 'table2',
 | 
			
		||||
      },
 | 
			
		||||
      context: {},
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await db.getRepository('roles').create({
 | 
			
		||||
      values: {
 | 
			
		||||
        name: 'testRole',
 | 
			
		||||
        resources: [
 | 
			
		||||
          {
 | 
			
		||||
            name: 'c1',
 | 
			
		||||
            actions: [
 | 
			
		||||
              {
 | 
			
		||||
                name: 'create',
 | 
			
		||||
              },
 | 
			
		||||
            ],
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const acl = app.acl;
 | 
			
		||||
    const testRole = acl.getRole('testRole');
 | 
			
		||||
    const resource = testRole.getResource('c1');
 | 
			
		||||
    expect(resource).toBeDefined();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should grant resource action', async () => {
 | 
			
		||||
    const collectionManager = db.getRepository('collections') as CollectionRepository;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -127,13 +127,17 @@ export class PluginACL extends Plugin {
 | 
			
		||||
 | 
			
		||||
    this.app.resourcer.registerActionHandler('roles:check', checkAction);
 | 
			
		||||
 | 
			
		||||
    this.app.db.on('roles.afterSave', async (model, options) => {
 | 
			
		||||
    this.app.db.on('roles.afterSaveWithAssociations', async (model, options) => {
 | 
			
		||||
      const { transaction } = options;
 | 
			
		||||
 | 
			
		||||
      model.writeToAcl({
 | 
			
		||||
        acl: this.acl,
 | 
			
		||||
      });
 | 
			
		||||
 | 
			
		||||
      for (const resource of (await model.getResources({ transaction })) as RoleResourceModel[]) {
 | 
			
		||||
        await this.writeResourceToACL(resource, transaction);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // model is default
 | 
			
		||||
      if (model.get('default')) {
 | 
			
		||||
        await this.app.db.getRepository('roles').update({
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user