liferay新增权限(二)
接着(一)讲,在做持久化的时候会在新增的portlet包下面有一个service包(参考自动生成持久化代码那篇文章),增加一个名为permission的包,增加orderPermission.java,内容如下:
public static void check(
PermissionChecker permissionChecker, long plid, long categoryId,
String actionId)
throws PortalException, SystemException, Exception {
if (!contains(permissionChecker, plid, categoryId, actionId)) {
throw new PrincipalException();
}
}
public static void check(
PermissionChecker permissionChecker, long categoryId,
String actionId)
throws PortalException, SystemException, Exception {
if (!contains(permissionChecker, categoryId, actionId)) {
throw new PrincipalException();
}
}
public static void check(
PermissionChecker permissionChecker, CategoryEntry category,
String actionId)
throws PortalException, SystemException {
if (!contains(permissionChecker, category, actionId)) {
throw new PrincipalException();
}
}
public static boolean contains(
PermissionChecker permissionChecker, long pld, long categoryId,
String actionId)
throws PortalException, SystemException, Exception {
if (categoryId == ProductCategoryUtil.DEFAULT_PARENT_CATEGORY_ID) {
return PortletPermissionUtil.contains(
permissionChecker, pld, "PROTLET_NAME", actionId);
}
else {
return contains(permissionChecker, categoryId, actionId);
}
}
public static boolean contains(
PermissionChecker permissionChecker, long categoryId,
String actionId)
throws PortalException, SystemException, Exception {
CategoryEntry category =
CategoryEntryServiceUtil.findByPrimaryKey(categoryId);
return contains(permissionChecker, category, actionId);
}
public static boolean contains(
PermissionChecker permissionChecker, CategoryEntry category,
String actionId)
throws PortalException, SystemException {
return permissionChecker.hasPermission(
category.getGroupId(), CategoryEntry.class.getName(),
category.getCategoryId(), actionId);
}
一个check对应一个contains,两个用在不同的场合,check用在后台持久化操作时候会抛出一个权限不足的错误,而contains用在JSP只是用来验证权限的.其实可以看出最后都是调用permissionChecker.hasPermission方法的,四个参数:1社区ID,2元素class名,3主键,4所操作的权限(要和order.xml中定义的权限名相同).还有一个PortletPermissionUtil.contains方法,这个是用来验证当前portlet操作权限的,他有四个参数:1permissionChecker,2当前layout.getPlid(),3portlet名,4所操作权限.
至于里面的参数的获得可以参照一下liferay原码中的shopping card,这个里面有这些参数的获得方法.有这个权限后,就可以把权限控制到每一个元素上. 1 楼 aaronfeng80 2008-02-19 不用自动生成持久化代码行吗?那些代码都是必需的吗? 2 楼 libin2722 2008-03-27 能不能再说得详细点,order表结构是什么样的,在后台和jsp页面是怎么调用呢? 3 楼 雪飞南国 2008-04-14 权限这块 我觉得你说的太粗了 liferay中所有的权限验证都是在围绕permissionChecker.hasPermission()转 不管check也好(以及check调用的)contains也好。大家最好参考http://docs.huihoo.com/liferay/4.3/portlet-development-guide/ch05.html这个,然后自己看看源码。 4 楼 Tyler_Zhou 2008-04-14
雪飞南国 19 分钟前
权限这块 我觉得你说的太粗了 liferay中所有的权限验证都是在围绕permissionChecker.hasPermission()转不管check也好(以及check调用的)contains也好。大家最好参考http: //docs.huihoo.com/liferay/4.3/portlet-development-guide/ch05.html这个,然后自己看看源码。
---------------------
你说的是对的,权限的核心就是permissionChecker这个类,在这里我只是讲了如何去用这个类按照liferay的操作方式来开发自已的权限,至这个类里面做了什么我这里并没有讲。简单说一下,他先是看缓存中有没有记录,没有再看是否登陆,然后再去找表resource_,resourceCode,最后才是permission表,在这个过程中他的判断分支是很多的,有兴趣大家可以去看一下他是怎么做的,这里我就不多讲了。 5 楼 Tyler_Zhou 2008-04-14
雪飞南国 19 分钟前
权限这块 我觉得你说的太粗了 liferay中所有的权限验证都是在围绕permissionChecker.hasPermission()转不管check也好(以及check调用的)contains也好。大家最好参考http: //docs.huihoo.com/liferay/4.3/portlet-development-guide/ch05.html这个,然后自己看看源码。
---------------------
你说的是对的,权限的核心就是permissionChecker这个类,在这里我只是讲了如何去用这个类按照liferay的操作方式来开发自已的权限,至这个类里面做了什么我这里并没有讲。简单说一下,他先是看缓存中有没有记录,没有再看是否登陆,然后再去找表resource_,resourceCode,最后才是permission表,在这个过程中他的判断分支是很多的,有兴趣大家可以去看一下他是怎么做的,这里我就不多讲了。 6 楼 Tyler_Zhou 2008-04-14
雪飞南国 19 分钟前
权限这块 我觉得你说的太粗了 liferay中所有的权限验证都是在围绕permissionChecker.hasPermission()转不管check也好(以及check调用的)contains也好。大家最好参考http: //docs.huihoo.com/liferay/4.3/portlet-development-guide/ch05.html这个,然后自己看看源码。
---------------------
你说的是对的,权限的核心就是permissionChecker这个类,在这里我只是讲了如何去用这个类按照liferay的操作方式来开发自已的权限,至这个类里面做了什么我这里并没有讲。简单说一下,他先是看缓存中有没有记录,没有再看是否登陆,然后再去找表resource_,resourceCode,最后才是permission表,在这个过程中他的判断分支是很多的,有兴趣大家可以去看一下他是怎么做的,这里我就不多讲了。 7 楼 Tyler_Zhou 2008-04-14 http: //docs.huihoo.com/liferay/4.3/这个网址不错,我记下来了,对雪飞南国 表示感谢. 8 楼 雪飞南国 2008-04-15 我也是刚进公司学习这个东西,权限这块比较复杂。看得我头晕,幸好已有些眉目。你的文章也对我很有帮助。共同学习!~ 9 楼 flyingcn 2008-06-25 我真的真的真的很奇怪,博主太强了,你是怎么知道这些内容!
要不是看到你的这篇文章,我真的要自己重写系统了