智能制造
智能制造
- 华为云芯片EDA云服务解决方案
- 映云科技车联网数据基础设施解决方案
- 美云智数产品企划数字化解决方案
- 天心天思数字化工厂解决方案
- 数码大方CAXA研发制造一体化解决方案
- 用友装备制造企业数字化解决方案
-
亿信华辰数据中台解决方案实践
- 方案概述
- 资源和成本规划
-
实施步骤
- EsMDM主数据管理平台
- 睿治数据治理平台
- ABI一站式数据分析平台
- 附录
- 修订记录
- 万腾科技制造运营管理MOM解决方案实践
- 华天软件3D+IM智能制造解决方案实践
- 金蝶云星空机械装备数字化解决方案实践
- 黑湖智造云端制造协同平台解决方案
- 依柯力新能源汽车MOM解决方案
- 赛瀚德工业云生产协同解决方案
- 中国汽研凯瑞机器人数字孪生解决方案
- 华磊迅拓MOMpro企业智造运营管理解决方案
- 链宇技术制造业数字化订单管理解决方案
- 万物智联智造云解决方案
- 华为云区域工业互联网公共技术服务平台
- 汉鑫MOM制造运营管理系统解决方案
- 汇智MOM解决方案
- 悠桦林智能供应链计划与排程解决方案
- 赛意制造运营管理MOM解决方案
- 华为云车联网数据应用解决方案
- 希维科技制造业数字化质量管理解决方案
- 造物数科工业云小站解决方案
- 环思纺织服装数字供应链解决方案
- 蜂巢工软工业云小站解决方案
- 能科科技数字主线解决方案
- 华龙讯达木星工业自动化平台智能制造解决方案
- 添翼D2M制造运营管理系统解决方案
- 鼎捷机械行业经营管理数字化解决方案
- 大腾智能工业设计与服务一站式解决方案
- 造物数科电子电路云工厂数字化解决方案
- 摩尔元数电子汽配装备制造执行系统解决方案
- 海之晨工业质检人工智能解决方案
- 中望机械和结构设计数字化解决方案
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
源代码
redis认证
-module(emqx_authz_redis). -include("emqx_authz.hrl"). -include_lib("emqx/include/emqx.hrl"). -include_lib("emqx/include/logger.hrl"). -include_lib("emqx/include/emqx_placeholder.hrl"). -behaviour(emqx_authz). %% AuthZ Callbacks -export([ description/0, create/1, update/1, destroy/1, authorize/4 ]). -ifdef(TEST). -compile(export_all). -compile(nowarn_export_all). -endif. -define(PLACEHOLDERS, [ ?PH_CERT_CN_NAME, ?PH_CERT_SUBJECT, ?PH_PEERHOST, ?PH_CLIENTID, ?PH_USERNAME ]). description() -> "AuthZ with Redis". create(#{cmd := CmdStr} = Source) -> Cmd = tokens(CmdStr), ResourceId = emqx_authz_utils:make_resource_id(?MODULE), CmdTemplate = emqx_authz_utils:parse_deep(Cmd, ?PLACEHOLDERS), {ok, _Data} = emqx_authz_utils:create_resource(ResourceId, emqx_connector_redis, Source), Source#{annotations => #{id => ResourceId}, cmd_template => CmdTemplate}. update(#{cmd := CmdStr} = Source) -> Cmd = tokens(CmdStr), CmdTemplate = emqx_authz_utils:parse_deep(Cmd, ?PLACEHOLDERS), case emqx_authz_utils:update_resource(emqx_connector_redis, Source) of {error, Reason} -> error({load_config_error, Reason}); {ok, Id} -> Source#{annotations => #{id => Id}, cmd_template => CmdTemplate} end. destroy(#{annotations := #{id := Id}}) -> ok = emqx_resource:remove_local(Id). authorize( Client, PubSub, Topic, #{ cmd_template := CmdTemplate, annotations := #{id := ResourceID} } ) -> Cmd = emqx_authz_utils:render_deep(CmdTemplate, Client), case emqx_resource:query(ResourceID, {cmd, Cmd}) of {ok, []} -> nomatch; {ok, Rows} -> do_authorize(Client, PubSub, Topic, Rows); {error, Reason} -> ?SLOG(error, #{ msg => "query_redis_error", reason => Reason, cmd => Cmd, resource_id => ResourceID }), nomatch end. do_authorize(_Client, _PubSub, _Topic, []) -> nomatch; do_authorize(Client, PubSub, Topic, [TopicFilter, Action | Tail]) -> case emqx_authz_rule:match( Client, PubSub, Topic, emqx_authz_rule:compile({allow, all, Action, [TopicFilter]}) ) of {matched, Permission} -> {matched, Permission}; nomatch -> do_authorize(Client, PubSub, Topic, Tail) end. tokens(Query) -> Tokens = binary:split(Query, <<" ">>, [global]), [Token || Token <- Tokens, size(Token) > 0].
父主题: 附录