import { OperationContext, User, WebContext } from "../index.js";
import { CoreModel } from "./coremodel.js";
export type Acl = {
    [key: string]: string;
};
/**
 * Object that contains ACL to define its own permissions
 *
 * @WebdaModel
 */
export default class AclModel extends CoreModel {
    /**
     * Object creator
     */
    _creator: string;
    /**
     * Permissions on the object
     */
    __acl: Acl;
    /**
     * Contains permissions
     */
    protected _permissions?: string[];
    /**
     * Ensure creator has all permissions by default
     */
    _onSave(): Promise<void>;
    /**
     * Add the permissions for current user
     */
    _onGet(): Promise<void>;
    /**
     * Return object ACLs
     * @returns
     */
    getAcl(): Acl;
    /**
     * Set object ACLs
     * @param acl
     */
    setAcl(acl: Acl): void;
    /**
     * Manage the ACL REST api actions
     * @param ctx
     * @returns
     */
    acl(ctx: WebContext): Promise<void | {
        raw: Acl;
        resolved: {
            permission: string;
            actor: any;
        }[];
    }>;
    /**
     * GET
     * @param ctx
     */
    _httpGetAcls(ctx: OperationContext): Promise<{
        raw: Acl;
        resolved: {
            permission: string;
            actor: any;
        }[];
    }>;
    /**
     * Get the user public entry
     *
     * Override if using a custom User without backward compatibility
     * @param ace
     * @returns
     */
    getUserPublicEntry(ace: string): Promise<any>;
    /**
     *
     */
    _httpPutAcls(ctx: OperationContext): Promise<void>;
    getGroups(_ctx: OperationContext, user: User): string[];
    /**
     * Get Permissions for one object
     * @param ctx
     * @param user
     * @returns
     */
    getPermissions(ctx: OperationContext, user?: User): Promise<string[]>;
    hasPermission(ctx: OperationContext, user: User, action: string): Promise<boolean>;
    canAct(ctx: OperationContext, action: string): Promise<string | boolean>;
}
export { AclModel };
