此CRM包括三个方面
客户管理系统:客户的信息 预约 生日提醒
进销存系统:进货 入库 销售
OA管理系统:比如日程安排
****************************************************************************************************************************************
约定大约配置!!!!!!!!!!!!!!!!!!!!!!得好好看看
ruby的纯面向对象 比如 取绝对值 负数也是一个对象
////////权限控制分为两部分:粗粒度的权限控制和细粒度的权限控制
****************************************************************************************************************************************
粗粒度的权限控制(过滤器实现):
注意点一:
要注意哪些页面不可以被拦截,比如index.jsp不能被拦截 login.jsp不能被拦截,image.jsp(用于显示验证码)不能被拦截
将不拦截的这些页面写到一个配置文件里面 side.properties;然后在拦截器里面将此属性文件读入即可。
注意点二:
用户正确登录后保存用户的信息到session中,然后转发到main.jsp。中间需要一个过滤器来控制!!!!当登录的时候要经过过滤器——判断用户信息
是否存放在session中,是的话放行,不是的话重定向到登录页面
注意要在web.xml里面配置过滤器
////////细粒度的权限控制(重点是写了一个BaseAction,其余的Action都是继承自BaseAction)
第一张重要的表:操作表。
这张表列出了所有模块的所有操作。
主要字段:模块名称 操作名称(比如增加,删除,修改) 排序 标题 提示 备注
第二张重要的表:User表
这张表主要用于描述了用户信息
主要字段:ID 用户名 private SysRole sysRole(权限组) private SysUserGroup sysUserGroup(所属部门)
第三种重要的表:操作权限表
这张表主要用来描述每个权限组对模块的方法的操作。即说明了每个权限组对哪些模块里的方法具有哪些操作
主要字段:权限组编号 功能模块名称 功能模块的操作(比如增加,删除)。用这三个字段作为联合字段,确保了唯一性。
即看到这张表就知道了此权限组对哪些模块的哪些方法具有哪些操作。
注意:由系统管理员给每个权限组设置权限
****************************************************************************************************************************************
代码实现:
自定义一个BaseAction extends DispatchAction,让其余的Action类继承自此BaseAction再结合注解来解决问题。
核心重点一:
自定义注解其生命周期为@Retention(RetentionPolicy.RUNTIME),该注解有两个属性——模块名称和权限(比如,增加,删除,修改)
然后给Action里的方法加上次自定义注解,表示此方法属于哪个模块和此方法是干什么用的
核心重点二:
就是重写了DispatchAction里面的execute()方法。
第一步:从Session里面取出User,重点是得到其权限组编号。
第二步:然后经过反射得到想要执行的方法。
第三步:得到此方法后,利用method.getAnnotation(MyAnnotation.class)得到此方法上的注解。
得到了注解当然也就得到了其属性——模块名称和权限(比如,增加,删除,修改)
第四步:利用此权限组号从操作权限表查出其所具有的所有权限,返回值为一个list
遍历此list(里面的每一个对象都有权限组编号,模块名称,权限)的每一个成员,将此成员与我们得到的权限组编号,模块名称,权限 (比如,增加,删除,修改)匹配。
成功的话表示有此权限,否则失败