权限菜单的显示
MVC框架:struts2 + spring + hibernate
实现功能:后台管理系统中,每个登录的用户,有多个不同的角色,而每个角色都有不同的权限,针对每个用户所拥有的权限列表,根据其中菜单权限的等级进行划分归类,显示在操作菜单栏中。
菜单结构如下:
权限表设计如下:
涉及的实体有部门、用户、角色及权限 ,部门-用户 是一对多关系,用户-角色是多对多关系,角色-权限也是多对多关系。在权限表中,权限等级取值可以是 1 、2、3,分别代表一级菜单、二级菜单、三级菜单,父级权限编号可以找到父级权限 ,一级菜单的父级权限默认是0,通过查询这个字段也可以找出某个菜单的子一级菜单列表。
通过这样的设计,就可以在用户登录后,获取用户拥有的所有角色,再根据每个角色拥有的权限进行汇总筛选,去除掉角色之间可能重复的权限,组合成分层次的权限结构,最后返回到页面中,根据权限等级划分层次显示即可。
以下是实体类的代码:
import java.util.List; import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; import com.ylzinfo.psBusiness.app.entity.power.JGInfo; import com.ylzinfo.psBusiness.app.entity.power.Role; @Entity @Table(name="SYS_USER") public class User { private String userid; // 用户ID(关键字) private String username; // 用户名(用户登录时的用户名 请确保登录名唯一) private String passwd; // 密码 private String realname; // 真实姓名 private String createtime; // 注册时间 private String lastlogontime;// 上次登陆时间 private String lockstate; // 账户锁定状态:0正常,1账户停用 private String loginedcount; // 已登陆次数 private String remark; // 备注 private JGInfo baz001;//所属部门 private String email;//邮箱地址 private String reset_pw;//重置密码验证码(格式:验证码_有效时间) private List<Role> roles;//角色列表 public User() { super(); } @Id @GeneratedValue(generator = "paymentableGenerator") @GenericGenerator(name = "paymentableGenerator", strategy = "uuid") public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } @Column(name="username") public String getUsername() { return username; } public void setUsername(String username)