cinder/cinder/policies/quotas.py
Lance Bragstad e0f4ab2286 Implement project personas for quotas and quota_classes
This commit updates the quota policies to use default roles provided by
keystone, including read-only support. This is inline with broader
changes across the OpenStack community to provide a more consistent
authorization experience.

Future changes will incorporate system scope when cinder fully supports
it.

This commit also updates the roles of a quotas test to not use the
'admin' role for checking the policy is not authorized. Instead, use
'member' and 'reader', which seem to be more realistic values for the
test since anyone with 'admin' can do just about anything in the
deployment.

Co-Authored-by: Alan Bishop <abishop@redhat.com>

Change-Id: I1b72a78180da46ff4a6257903d76069389f2a1f4
2021-09-08 16:35:54 -07:00

78 lines
2.2 KiB
Python

# Copyright (c) 2017 Huawei Technologies Co., Ltd.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from oslo_policy import policy
from cinder.policies import base
SHOW_POLICY = 'volume_extension:quotas:show'
UPDATE_POLICY = 'volume_extension:quotas:update'
DELETE_POLICY = 'volume_extension:quotas:delete'
deprecated_show_policy = policy.DeprecatedRule(
name=SHOW_POLICY,
check_str=base.RULE_ADMIN_OR_OWNER
)
quota_policies = [
policy.DocumentedRuleDefault(
name=SHOW_POLICY,
check_str=base.SYSTEM_READER_OR_PROJECT_READER,
description="Show project quota (including usage and default).",
operations=[
{
'method': 'GET',
'path': '/os-quota-sets/{project_id}'
},
{
'method': 'GET',
'path': '/os-quota-sets/{project_id}/default'
},
{
'method': 'GET',
'path': '/os-quota-sets/{project_id}?usage=True'
}
],
deprecated_rule=deprecated_show_policy,
),
policy.DocumentedRuleDefault(
name=UPDATE_POLICY,
check_str=base.RULE_ADMIN_API,
description="Update project quota.",
operations=[
{
'method': 'PUT',
'path': '/os-quota-sets/{project_id}'
}
]
),
policy.DocumentedRuleDefault(
name=DELETE_POLICY,
check_str=base.RULE_ADMIN_API,
description="Delete project quota.",
operations=[
{
'method': 'DELETE',
'path': '/os-quota-sets/{project_id}'
}
]
),
]
def list_rules():
return quota_policies