权限模型设计时,一般是用户可以是多个角色,每个角色分配一组权限,每个用户还可以分配几个额外权限。
在权限分配的页面上,一般还需要将权限按照树状的层次展现出来,如“用户管理"节点下有“创建用户”“删除用户”“修改用户” 几个权限。
然而权限对象本身是特殊的,有时权限针对页面,有时权限针对的是数据的范围。所以我考虑,是否可以把权限描述为一个接口?
目前在Light-Commons 的权限框架中,是使用 IUser.getPermissionKeys() 来获取用户权限key列表,这些key对应配置文件中定义的一些可访问url。但对于其他的权限逻辑无法控制。
如何才能编写一个通用的权限模型呢?
另外,我觉得一个应用所对应的权限大部分是固定的,应该由配置文件读取,而不是由数据库读取。但是有些系统权限也需要是动态的,比如创建了一个部门后,也就创建了这个部门的一些操作权限,可以将这些权限分配给某个人。
另外,权限里面还有一种特殊的类型,比如“操作自己的数据”,“操作自己所在部门的数据”,“操作自己下属的数据”,这些权限不是具体到控制对象的,而是表达一种与控制对象的关联关系。一般来说都是硬编码实现的。可复用很难。
基本上,对于权限的逻辑部分,我认为复用很难,但是整个权限部分整理一个模板,还是有可能的。至少页面层的模板应该是可以的,如创建用户页面,权限分配页面。如:但需要后台的权限相关对象匹配。
在权限分配的页面上,一般还需要将权限按照树状的层次展现出来,如“用户管理"节点下有“创建用户”“删除用户”“修改用户” 几个权限。
然而权限对象本身是特殊的,有时权限针对页面,有时权限针对的是数据的范围。所以我考虑,是否可以把权限描述为一个接口?
class User{
List<Role> roles;
List<Permission> additionalPermission;
}
class Role{
List<Permission> permissions;
}
interface Permission{
String getName(Locale locale)
String getDescription(Locale locale)
}
class WebPermission{
List<Pattern> getAccessibleUrl();
}
目前在Light-Commons 的权限框架中,是使用 IUser.getPermissionKeys() 来获取用户权限key列表,这些key对应配置文件中定义的一些可访问url。但对于其他的权限逻辑无法控制。
如何才能编写一个通用的权限模型呢?
另外,我觉得一个应用所对应的权限大部分是固定的,应该由配置文件读取,而不是由数据库读取。但是有些系统权限也需要是动态的,比如创建了一个部门后,也就创建了这个部门的一些操作权限,可以将这些权限分配给某个人。
另外,权限里面还有一种特殊的类型,比如“操作自己的数据”,“操作自己所在部门的数据”,“操作自己下属的数据”,这些权限不是具体到控制对象的,而是表达一种与控制对象的关联关系。一般来说都是硬编码实现的。可复用很难。
基本上,对于权限的逻辑部分,我认为复用很难,但是整个权限部分整理一个模板,还是有可能的。至少页面层的模板应该是可以的,如创建用户页面,权限分配页面。如:但需要后台的权限相关对象匹配。