protected function getAllowedAclFields(Model $model, $scenario)
    {
        $privilege = ['set', 'set_on_' . $scenario];
        $acl = app(AclContract::class);
        $modelClass = get_class($model);
        $cacheKey = sha1(json_encode($privilege) . $acl->getContextId() . $modelClass);
        if (!isset($this->fieldAclCache[$cacheKey])) {
            $this->fieldAclCache[$cacheKey] = [];
            $this->fieldAclCache[$cacheKey][] = 'meta';
            foreach ($model->getFields() as $fieldName) {
                if ($acl->isAllowedField($modelClass, $fieldName, $privilege)) {
                    $this->fieldAclCache[$cacheKey][] = $fieldName;
                }
            }
            foreach ($model->metaFields() as $fieldName) {
                $metaFieldName = 'meta.' . $fieldName;
                if ($acl->isAllowedField($modelClass, $metaFieldName, $privilege)) {
                    $this->fieldAclCache[$cacheKey][] = $metaFieldName;
                }
            }
        }
        return $this->fieldAclCache[$cacheKey];
    }