ofbiz登录和关联party机制

在party模块中让userLogin拥有的partyId的字段,这样一个用户登录了之后就能关联到他自己的party了。party模块下实体定义中UserLogin的扩展,代码如下:
--------------------------------------------------------------------------------
<extend-entity entity-name="UserLogin">
     <field name="partyId" type="id"></field>
     <relation type="one" fk-name="USER_PARTY" rel-entity-name="Party">
         <key-map field-name="partyId"/>
     </relation>
     <relation type="one-nofk" rel-entity-name="Person">
         <key-map field-name="partyId"/>
     </relation>
     <relation type="one-nofk" rel-entity-name="PartyGroup">
         <key-map field-name="partyId"/>
     </relation>
</extend-entity>

--------------------------------------------------------------------------------
这样给UserLogin表扩展了之后在任何其他有UserLogin的地方都能获得Party了。
具体扩展关联Party的表全在这个实体定义文件中。也就是那些扩展了partyId的扩展实体。
1.具体有登录历史记录UserLoginHistory中关联了参与者。在LoginServices.java中有如下代码记录了登录记录
--------------------------------------------------------------------------------
if (createHistory) {
                 	 Map<String, Object> ulhCreateMap = UtilMisc.toMap("userLoginId", username, "visitId", visitId,	"fromDate", UtilDateTime.nowTimestamp(), "successfulLogin", successfulLogin);

	ModelEntity modelUserLogin = userLogin.getModelEntity();
	if (modelUserLogin.isField("partyId")) {
		ulhCreateMap.put("partyId", userLogin.get("partyId"));
	}
// ONLY save the password if it was incorrect
	if ("N".equals(successfulLogin) && !"false".equals(UtilProperties.getPropertyValue("security.properties", "store.login.history.incorrect.password"))) {
              ulhCreateMap.put("passwordUsed", password);
        }

//Debug.logInfo(new Exception(), "=================== Creating new UserLoginHistory at " + UtilDateTime.nowTimestamp(), module);	
	delegator.create("UserLoginHistory", ulhCreateMap);
}
--------------------------------------------------------------------------------
这样一句ulhCreateMap.put("partyId", userLogin.get("partyId"));关联了Party。
2.类似的ServerHitBin.java 657行对服务调用记录ServerHit表进行了关联Party。
3.类似的VisitHandler.java 55和68行对网站访问记录Visit和Visitor表进行了关联Party。
4.另外还有个在登录的时候通过UserLogin获取Person(一种类型的Party)放在session中,代码在LoginWorker.java中。559行和771行。
感觉上Party是在后面加上去的,以前只有UserLogin的感觉,后来有了Party,把一些记录UserLogin的地方关联一下Party。比如登录记录什么的。
如我我们的Party的主键不止一个的时候我们可以有2中方法解决和ofbiz的兼容。
1.UserLogin中加上你的Party的所有主键。在所有出现modelUserLogin.isField("partyId")的地方,多put进去你在UserLogin中获取的主键。记得扩展上面我们1、2、3的表和修改上面这些应用的展示地方修改获取Party。
2.改Party的主键为一个类似工号的一个字段为partyId,保证唯一,原来主键的直接放在Party中。ofbiz中其他地方不变。

你可能感兴趣的:(Security,ofbiz,userlogin,party)