githublaohu edited a comment on issue #485: Develop acl URL: https://github.com/apache/rocketmq/pull/485#issuecomment-429607598 ### 目录结构与类基本说明 <html> acl-plug/src/main/java/org/apache/rocketmq/acl/plug</br> ├── engine</br> │ ├── AclPlugEngine.java</br> │ ├── AuthenticationInfoManagementAclPlugEngine.java</br> │ ├── LoginInfoAclPlugEngine.java</br> │ └── PlainAclPlugEngine.java</br> ├── entity</br> │ ├── AccessControl.java</br> │ ├── AuthenticationInfo.java</br> │ ├── AuthenticationResult.java</br> │ ├── BorkerAccessControl.java</br> │ ├── BorkerAccessControlTransport.java</br> │ ├── ControllerParameters.java</br> │ └── LoginInfo.java</br> ├── exception</br> │ └── AclPlugRuntimeException.java</br> ├── strategy</br> │ ├── NetaddressStrategy.java</br> │ └── NetaddressStrategyFactory.java</br> ├── AccessContralAnalysis.java</br> ├── AclPlugController.java</br> ├── AclRemotingService.java</br> ├── AclUtils.java</br> ├── Authentication.java</br> └── DefaultAclRemotingServiceImpl.java</br> </html> ### AccessControl > 权限系统基本分为用户,角色,功能这三点。BorkerAccessControl就是borker角色。 1. 基类AccessControl等于用户 2. AccessControl的实现是角色。 3. 实现类的每个全局变量是这个角色可以用用的所有功能。 比如扩张nameServer的acl-plug的权限功能,只需要写一个NameServerAccessContorl类,里面的变量包含nameServer所有网络请求就可以了。  ### NetaddressStrategy > NetaddressStrategy的功能是校验登陆ip地址与账户IP表达式是否匹配。AccessControl类的netaddress变量就是账户IP表达式 netaddress支持的表达式如下 1. OneNetaddressStrategy处理简单的IP表达式 2. 127.0.0.1 2. MultipleNetaddressStrategy处理多个IP表达式 2. 127.0.0.{1,2,3} 2. 127.0.0.1,127.0.0.2,127.0.0.3 3. 范围 RangeNetaddressStrategy处理范围IP表达 1. 127.0.0.* 2. 127.0.0.1-200 3. 127.0.1-200.* 4. NullNetaddressStrategy处理所有IP表达式 1. \* 或者没设值  BrokerAccessControlTransport > BrokerAccessControlTransport是用来把yml里面的数据序列化称java对象的接收类。没有其他功能 AuthenticationInfo > 是为了解决acl-plug鉴权的特性(需要进行IP鉴权),保证AccessControl干净与耦合与扩展而设计的。 ```java private AccessControl accessControl; /* * AccessControl中IP表达式中对应的NetaddressStrategy */ private NetaddressStrategy netaddressStrategy; /*remoting 是通过 code(Integer)识别调用接口的。 *而accessControl字段名是字符串,需要进行一次解析与识别。把解析与识别的结果保存到authority里面。 *解析与识别对象为AccessContralAnalysis */ private Map<Integer, Boolean> authority; ``` ### AclPlugEngine类关系图 > AclPlugEngine是核心体系,一套简单鉴权的权限体系与校验,登陆功能等。提供了完整的扩张功能。 AuthenticationInfoManagementAclPlugEngine > 负责AuthenticationInfo的生成管理,重要细节请看下面端代码。 ```java AuthenticationInfo authenticationInfo = new AuthenticationInfo(accessContralAnalysis.analysis(accessControl), accessControl, netaddressStrategyFactory.getNetaddressStrategy(accessControl)); ``` LoginInfoAclPlugEngine > 负责登陆,注销等操作 PlainAclPlugEngine > 通过Palin方法获得acl-plug需要的账户信息。也可以通过网络的方法获得。只需要继承LoginInfoAclPlugEngine即可 AccessContralAnalysis > 负责AccessContral解析与识别对象 Authentication > 负责鉴权  ### AclPlugController与AclRemotingService > 目前的需求在某种程度上可以认为AclPlugController与AclRemotingService的设计可以放到AclPlugEngine里面。但是为了管理,扩张与维护,解耦分开了。 AclPlugController负责整个acl-plug的管理,比如决定AclRemotingService与AclPlugEngine实现。不用PlainAclPlugEngine的方式,同过自定义的方法获取账户信息 AclRemotingService负责对外接口请求 如果要在RocketMQ里面找到对应的设计。AclPlugController相当于broker,AclPlugEngine相当于store,AclRemotingService相当于remoting。
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
