26using namespace Qt::StringLiterals;
44 QStringList expressions = QStringList();
45 QgsAccessControlFilterMap::const_iterator acIterator;
47 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
49 const QString expression = acIterator.value()->layerFilterExpression( layer );
50 if ( !expression.isEmpty() )
52 expressions.append( expression );
57 if ( !expressions.isEmpty() )
59 expression = u
"(("_s.append( expressions.join(
") AND ("_L1 ) ).append(
"))" );
68 mFilterFeaturesExpressions.clear();
77 if ( mResolved && mFilterFeaturesExpressions.contains( layer->
id() ) )
79 expression = mFilterFeaturesExpressions[layer->
id()];
86 if ( !expression.isEmpty() )
102 QgsAccessControlFilterMap::const_iterator acIterator;
103 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
105 const QString sql = acIterator.value()->layerFilterSubsetString( layer );
106 if ( !sql.isEmpty() )
111 return sqls.isEmpty() ? QString() : u
"(("_s.append( sqls.join(
") AND ("_L1 ) ).append(
"))" );
117 QgsAccessControlFilterMap::const_iterator acIterator;
118 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
120 if ( !acIterator.value()->layerPermissions( layer ).canRead )
131 QgsAccessControlFilterMap::const_iterator acIterator;
132 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
134 if ( !acIterator.value()->layerPermissions( layer ).canInsert )
145 QgsAccessControlFilterMap::const_iterator acIterator;
146 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
148 if ( !acIterator.value()->layerPermissions( layer ).canUpdate )
159 QgsAccessControlFilterMap::const_iterator acIterator;
160 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
162 if ( !acIterator.value()->layerPermissions( layer ).canDelete )
173 QStringList currentAttributes( attributes );
174 QgsAccessControlFilterMap::const_iterator acIterator;
175 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
177 currentAttributes = acIterator.value()->authorizedLayerAttributes( layer, currentAttributes );
179 return currentAttributes;
185 QgsAccessControlFilterMap::const_iterator acIterator;
186 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
188 if ( !acIterator.value()->allowToEdit( layer, feature ) )
199 QgsAccessControlFilterMap::const_iterator acIterator;
200 for ( acIterator = mPluginsAccessControls->constBegin(); acIterator != mPluginsAccessControls->constEnd(); ++acIterator )
202 const QString newKey = acIterator.value()->cacheKey();
203 if ( !newKey.isEmpty() )
215 mPluginsAccessControls->insert( priority, accessControl );
Defines access control interface for QGIS Server plugins.
QStringList layerAttributes(const QgsVectorLayer *layer, const QStringList &attributes) const override
Returns the authorized layer attributes.
bool layerUpdatePermission(const QgsVectorLayer *layer) const
Returns the layer update right.
void filterFeatures(const QgsVectorLayer *layer, QgsFeatureRequest &filterFeatures) const override
Filter the features of the layer.
bool layerInsertPermission(const QgsVectorLayer *layer) const
Returns the layer insert right.
bool layerReadPermission(const QgsMapLayer *layer) const
Returns the layer read right.
QgsAccessControl * clone() const override
Clone the object.
bool fillCacheKey(QStringList &cacheKey) const
Fill the capabilities caching key.
bool allowToEdit(const QgsVectorLayer *layer, const QgsFeature &feature) const
Are we authorized to modify the following geometry.
bool layerDeletePermission(const QgsVectorLayer *layer) const
Returns the layer delete right.
void resolveFilterFeatures(const QList< QgsMapLayer * > &layers)
Resolve features' filter of layers The method fetch filter's expressions returned from access control...
void registerAccessControl(QgsAccessControlFilter *accessControl, int priority=0)
Register an access control filter.
void unresolveFilterFeatures()
Clear expression's cache computed from resolveFilterFeatures.
QgsAccessControl()
Constructor.
QString extraSubsetString(const QgsVectorLayer *layer) const
Returns an additional subset string (typically SQL) filter.
Wraps a request for features to a vector layer (or directly its vector data provider).
QgsFeatureRequest & combineFilterExpression(const QString &expression)
Modifies the existing filter expression to add an additional expression filter.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Base class for all map layer types.
Represents a vector layer which manages a vector based dataset.
const QString cacheKey(const QString &pathIn)