第 57 章 用户组控制台

在最简权限控制台的基础上添加对用户组的支持。

用户组控制台中将添加如下功能:浏览用户组,新增用户组,修改用户组,删除用户组,为用户组授权,将用户添加到用户组中。

57.1. 添加对用户组的支持

默认情况是不会启用用户组功能的,我们需要为userDetailsManager设置enableGroups属性。

<bean id="userDetailsManager" class="org.springframework.security.provisioning.JdbcUserDetailsManager">
    <property name="dataSource" ref="dataSource"/>
    <property name="userCache" ref="userCache"/>
    <property name="enableGroups" value="true"/>
</bean>
        

这样就在系统中开启了用户组功能,与用户组有关的数据库表结构参考:第 44 章 使用用户组

57.2. 浏览用户组

这一步通过GroupManager接口中定义的findAllGroups()方法获得数据库中所有用户组的名称,再根据用户组名称获得对应的成员和权限。

public List<UserGroupBean> getAll() {
	List<UserGroupBean> list = new ArrayList<UserGroupBean>();
	List<String> groups = groupManager.findAllGroups();

	for (String groupName : groups) {
		List<String> members = groupManager.findUsersInGroup(groupName);
		List<GrantedAuthority> authorities = groupManager
			.findGroupAuthorities(groupName);
		UserGroupBean bean = new UserGroupBean();

		bean.setName(groupName);
		bean.setMembers(members);
		bean.setAuthorities(authorities);
		list.add(bean);
	}

	return list;
}
        

页面上将显示用户组名称,拥有的成员和分配的权限。

显示所有用户组

图 57.1. 显示所有用户组


57.3. 创建用户组

创建用户组需要指定用户组的名称和用户组的权限。

public void save(String groupName, String[] authorities) {
	List<GrantedAuthority> gas = new ArrayList<GrantedAuthority>(authorities.length);

	for (int i = 0; i < authorities.length; i++) {
		gas.add(new GrantedAuthorityImpl(authorities[i].trim()));
	}

	groupManager.createGroup(groupName, gas);
}
        
填写用户组信息

图 57.2. 填写用户组信息


创建成功

图 57.3. 创建成功


57.4. 修改用户组

可以修改用户组的名称,用户组的成员和用户组的权限。

public void update(String oldName, String groupName, String[] members,
	String[] authorities) {
	List<String> usernames = groupManager.findUsersInGroup(oldName);

	for (String username : usernames) {
		groupManager.removeUserFromGroup(username, oldName);
	}

	for (String member : members) {
		if ((member != null) && !member.equals("")) {
			groupManager.addUserToGroup(member, oldName);
		}
	}

	List<GrantedAuthority> gas = groupManager.findGroupAuthorities(groupName);

	for (GrantedAuthority ga : gas) {
		groupManager.removeGroupAuthority(oldName, ga);
	}

	for (int i = 0; i < authorities.length; i++) {
		String auth = authorities[i];

		if ((auth != null) && !auth.trim().equals("")) {
			GrantedAuthority ga = new GrantedAuthorityImpl(auth.trim());
			groupManager.addGroupAuthority(oldName, ga);
		}
	}

	groupManager.renameGroup(oldName, groupName);
}
        
修改用户组

图 57.4. 修改用户组


实例代码在ch402。