使用应用程序实现更改用户角色方案

时间:2015-06-21 18:24:18

标签: java spring hibernate velocity

我有一个场景,我需要更新一个用户可以拥有m个角色的用户角色。

@Entity
public class User{
    private String name;
    private String login;
    private String password;
    @OneToMany
    private Role role;
}

假设我有一个User对象列表,其中的角色与每个用户相关联。现在我必须在UI中显示这些数据。例如,如下所示,

User Name      Roles
A              (ckbox_selected)Admin (ckbox)Viewer (ckbox)Reporter
B              (ckbox)Admin          (ckbox)Viewer (ckbox_selected)Reporter

用户A目前拥有管理员权限,现在我们也添加了查看器。那么在视图和服务层如何实现这种场景呢? dao将返回用户列表。 或者是否有其他简单的方法设计并实现这种情况?

如果没有,可以解释使用Spring MVC上下文或任何其他框架。 View可以是带弹簧标签的jsp,也可以是Apache Velocity等其他模板视图。模型使用hibernate与数据库进行映射。

1 个答案:

答案 0 :(得分:1)

它应该像这样

实体

<form:form comandName="user" method="post">

<form:checkboxes path="roles" items="${roles}" itemLabel="name" itemValue="id"/>

</form:form>

带有spring mvc标记的JSP

    @RequestMapping(method = RequestMethod.POST)
    public String add(@ModelAttribute("user") User user, BindingResult result) {
        validator.validate(user, result);
        if (result.hasErrors())
            return "/user";

        userDao.update(user);
        return "redirect:/users";

    }

  @InitBinder
  public void initBinder(ServletRequestDataBinder binder) {
  binder.registerCustomEditor(List.class, "roles", new CustomCollectionEditor(List.class) {

            protected Object convertElement(Object element) {
                if (element != null) {
                    Integer roleId = Integer.parseInt(element.toString());
                    Role role = (Role) roleDao.getById(roleId);
                    return role;

                }
                return null;
            }

        });

    }

Spring控制器

<script>
$(document).ready(function(){

    $("#burger").click(function(){
        $("#menu").slideToggle();
    });
});
</script>
<!-- END OF SCRIPTS --> 

<!-- HEADER -->
<header>
    <div id="top">
        <a href="#" id="logo"><img src="root/logo.png"></a>

        <div id="burger">
            <a>Menu</a>
        </div>
    </div>

    <nav id="navbar">
        <ul id="menu">
            <li><a  href="#">Option 1</a></li>
            <li><a  href="#">Option 2</a></li>
            <li><a  href="#">Option 3</a></li>
            <li><a  href="#">Option 4</a></li>
            <li><a  href="#">Option 5</a></li>
        </ul>
    </nav>
</header>
<!-- END HEADER -->
</body>
</head>