2008-02-26
liferay权限关于defaults权限的问题
权限配置文件中:
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
访客和成员默认有了view权限,事实是否如此呢?回答:"不是".前几天客户反应新增加的产品访客看不见,只有把权限更新一下才能看得见,每一个都要更新无法接受,仔细跟进ProductCategoryPermission.contains(permissionChecker, categoryEntry, ActionKeys.VIEW)这个方法发现,PermissionCheckerImpl.hasPermission这个方法中先调用
Boolean value = PermissionCacheUtil.hasPermission(
user.getUserId(), groupId, name, primKey, actionId);先看一下内存文件里有没有记录(c:/{user}/liferay),如果你是第一次刚启动他返回肯定是null,然后是
value = new Boolean(
hasPermissionImpl(groupId, name, primKey, actionId));最关键的就是这个方法了,如果你是访客会调用hasGuestPermission,最终会调用PermissionServiceUtil.hasUserPermissions(
defaultUserId, guestGroup.getGroupId(), actionId, resourceIds,
bag);
代码部分就说到这,感觉太多了说不完,他操作流程是先找到resourcecode这个表,取得CODEID,然后再找resource这个表,取得RESOURCEID,最后才去找permission_这个表,找到permissionid后,再去用userId和permissionid去数据库里取得是否有权限,最后再把结果存到缓存文件里,以后再做这个权限验证他就不会走相同的路了,这一点是要注意的.
这样就出现了一个问题,产品可能有几万条,只是其中的几条不给访客看,每一个都要设置的话那就是要人命了,于是在ProductCategoryPermission.contains方法加上
try{
ResourceServiceUtil.getResource(
companyId, CategoryEntry.class.getName(), ResourceImpl.SCOPE_INDIVIDUAL, String.valueOf(category.getCategoryId()));
}catch (NoSuchResourceException nsre) {
return true;
}刚加的实例在resource这个表里是肯定没有的,getResource方法会报一个NoSuchResourceException ,报了就返回true,如果不报错就接着向下走,走liferay那一套,ResourceImpl.SCOPE_INDIVIDUAL这个值是设定范围的,在取resourcecode这个表会用到,有四个值可选,感觉好像只会用到SCOPE_INDIVIDUAL.
OK,到这里就结束了,再调用view验证时候,他就会先找这个是否存在表中,不存在就返回true.
<community-defaults>
<action-key>VIEW</action-key>
</community-defaults>
<guest-defaults>
<action-key>VIEW</action-key>
</guest-defaults>
访客和成员默认有了view权限,事实是否如此呢?回答:"不是".前几天客户反应新增加的产品访客看不见,只有把权限更新一下才能看得见,每一个都要更新无法接受,仔细跟进ProductCategoryPermission.contains(permissionChecker, categoryEntry, ActionKeys.VIEW)这个方法发现,PermissionCheckerImpl.hasPermission这个方法中先调用
Boolean value = PermissionCacheUtil.hasPermission(
user.getUserId(), groupId, name, primKey, actionId);先看一下内存文件里有没有记录(c:/{user}/liferay),如果你是第一次刚启动他返回肯定是null,然后是
value = new Boolean(
hasPermissionImpl(groupId, name, primKey, actionId));最关键的就是这个方法了,如果你是访客会调用hasGuestPermission,最终会调用PermissionServiceUtil.hasUserPermissions(
defaultUserId, guestGroup.getGroupId(), actionId, resourceIds,
bag);
代码部分就说到这,感觉太多了说不完,他操作流程是先找到resourcecode这个表,取得CODEID,然后再找resource这个表,取得RESOURCEID,最后才去找permission_这个表,找到permissionid后,再去用userId和permissionid去数据库里取得是否有权限,最后再把结果存到缓存文件里,以后再做这个权限验证他就不会走相同的路了,这一点是要注意的.
这样就出现了一个问题,产品可能有几万条,只是其中的几条不给访客看,每一个都要设置的话那就是要人命了,于是在ProductCategoryPermission.contains方法加上
try{
ResourceServiceUtil.getResource(
companyId, CategoryEntry.class.getName(), ResourceImpl.SCOPE_INDIVIDUAL, String.valueOf(category.getCategoryId()));
}catch (NoSuchResourceException nsre) {
return true;
}刚加的实例在resource这个表里是肯定没有的,getResource方法会报一个NoSuchResourceException ,报了就返回true,如果不报错就接着向下走,走liferay那一套,ResourceImpl.SCOPE_INDIVIDUAL这个值是设定范围的,在取resourcecode这个表会用到,有四个值可选,感觉好像只会用到SCOPE_INDIVIDUAL.
OK,到这里就结束了,再调用view验证时候,他就会先找这个是否存在表中,不存在就返回true.
发表评论
- 浏览: 63258 次
- 性别:

- 来自: 湖北

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
很烦,想站在阳台上大声的 ...
引用我虽然很喜欢IT这个工作,但是发现自已现在越来越像白痴,好像除了程序啥也不会 ...
-- by dins2003 -
liferay5.0网站导入导出
用心看,或都有雅兴的话你也可以调试一下,就可以看得很清楚了,当然调试之前把默认值 ...
-- by Tyler_Zhou -
liferay5.0网站导入导出
这是生成主键的代码,先读一次这个表,找到当前主键值,加上一个COUNTER_IN ...
-- by Kisses99 -
很烦,想站在阳台上大声的 ...
引用如果我有不死邪神的力量,我会毫不犹豫的灭了这个世界 ......呵呵 引用 ...
-- by eccojap -
很烦,想站在阳台上大声的 ...
呵呵 工作狂哦
-- by isky






评论排行榜