keystone中的参数校验

本文介绍Keystone中用户创建过程的参数验证机制,包括使用SchemaValidator进行数据校验的方法及具体的参数要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

keystone中无论是创建用户、更新用户还是其它操作,在controller方法的入口处,一般首先对入参进行基本校验。
keystone封装了一个通用的类SchemaValidator,位于keystone\common\validation\validators模块中。

代码如下所示:

def create_user(self, request, user):
    validation.lazy_validate(schema.user_create, user)

def lazy_validate(request_body_schema, resource_to_validate)
    schema_validator = validattors.SchemaValidator(request_body_schema)
    schema_validator.validate(resource_to_validate)

传入的参数:
schema.user_create  
user_create = {
    'type': 'object',
    'properties': _user_properties, //表示待校验的property, 引用_user_properties(创建用户的json体中)
    'required': ['name'],//json体中,必须包含那个(些)property
    'minProperties': 1,//json体中,至少包含一个property
    'options': {//不懂
        'type': 'object'    
    },
    'additionalProperties': True//是否允许有额外的property,如果为False则json体只能是_user_properties子集
}
_user_properties = {
    'default_project_id': validation.nullable(parameter_types.id_string),//表示项目Id也可以为null
    'domain_id': parameter_types.id_string,//string类型,最小长度1最大长度64,正则匹配
    'enabled': parameter_types.boolean,//必须是bolean型
    'name': _identity_name,//String类型,最小长度1,正则匹配
    'password': {
        'type': ['string', 'null']//String类型,或者为null
    },
    'options': ro.USER_OPTIONS_REGISTRY.json_schema
}

parameter_types.id_string:
id_string = {
    'type': 'string',
    'minLength': 1,
    'maxLength': 64,
    'pattern': '^[a-zA-Z0-9-]+$'
}

_identity_name = {
 'type': 'string',
 'minLength': 1,
 'pattern': '[\S]+'
}

只支持对string、boolean类型的数值检查。如果是整型,json体中,value也需要写成字符串的形式。

### 解决 Make 编译过程中文件无法打开的问题 在执行 `make` 编译时,如果出现类似于 “Error opening file” 或者警告信息如 `TEMPORARY_DISABLE_PATH_RESTRICTIONS`,这通常是由于路径权限不足、文件丢失或配置脚本中的语法错误引起的。以下是对此类问题的分析与解决方案。 #### 可能原因及解决办法 1. **路径权限不足** - 当前用户可能没有足够的权限访问某些目录或文件。可以通过提升权限解决问题。 ```bash sudo chmod -R 755 vendor/qcom/proprietary/ ``` 此外,确保当前用户属于开发者组,并拥有对这些文件的操作权[^1]。 2. **文件丢失或损坏** - 配置文件(如 `config.mk`, `device-vendor-qssi-noship.mk` 等)可能存在缺失或被意外删除的情况。可以尝试重新同步源码仓库以恢复默认状态: ```bash repo sync --force-sync ``` 3. **临时禁用路径限制** - 若存在 `TEMPORARY_DISABLE_PATH_RESTRICTIONS` 提示,则表明部分路径未满足安全策略要求。可在顶层 `Makefile` 中加入以下宏定义暂时绕过检查: ```makefile export RELAXED_BUILD=true ``` 不过这种方法仅适用于调试阶段,正式发布前应修复根本问题[^2]。 4. **配置冲突** - 多个 `.mk` 文件之间可能发生变量覆盖现象,进而影响正常加载逻辑。仔细审查涉及的所有配置项是否有矛盾之处。例如对比 `prebuilt.mk` 和 `products.mk` 是否同时定义了同名参数[^3]。 5. **工具链兼容性** - 错误也可能源于交叉编译器版本不适配所致。按照官方指导安装最新稳定版 GCC 工具链,并验证其能否正确解析 ARM 架构指令集[^4]。 #### 示例修正措施 假设问题是因某特定头文件不可达引起,那么可以在关联规则里显式声明依赖关系: ```makefile $(KERNEL_OUT)/include/generated/autoconf.h: $(wildcard include/config/*) @echo 'Regenerating $@...' $(Q)mkdir -p $(dir $@); \ touch $@ ``` 对于 SD 卡刷入操作引发的相关异常,务必遵循标准流程逐一校验每步命令准确性。比如确认镜像文件命名一致性和挂载点有效性等方面均无偏差后才继续后续动作[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值