1. 程式人生 > >RBAC從零開始--使用者管理之新增

RBAC從零開始--使用者管理之新增

需要的js外掛

bootstrap-select.min.js
bootstrap-select.min.css
jquery-ui.min.js
jquery-ui.min.css
toastr.min.js
toastr.min.css

user-mgmt.jsp

......
<!-- 新增彈出層 modal -->
<div class="modal right fade" id="addModal" tabindex="-1" role="dialog" aria-labelledby="addModalLabel" aria-hidden="true"
>
<div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">新增使用者</h4> </div> <div class="modal-body"> <div
class="form-group">
<div class="row"> <label class="control-label col-sm-2">使用者名稱</label> <input id="user-name" class="form-control col-sm-9" placeholder="輸入使用者名稱..." /> <p class="name-img"
>
</p> </div> </div> <div class="form-group"> <div class="row"> <label class="control-label col-sm-3">管理員</label> <label class="radio-inline col-xs-4 col-sm-4"> <input type="radio" name="is-admin" value="1" checked></label> <label class="radio-inline col-xs-4 col-sm-4"> <input type="radio" name="is-admin" value="0"></label> </div> </div> <div class="form-group"> <div class="row"> <label class="control-label col-sm-2">郵箱</label> <input type="email" id="user-email" class="form-control col-sm-9"/> <p class="email-img"></p> </div> </div> <div class="form-group"> <div class="row"> <label class="control-label col-sm-3">使用者狀態</label> <label class="radio-inline col-xs-4 col-sm-4"> <input type="radio" name="user-status" value="1" checked>有效 </label> <label class="radio-inline col-xs-4 col-sm-4"> <input type="radio" name="user-status" value="0">無效 </label> </div> </div> <div class="form-group"> <div class="row set-role"> <label class="control-label col-sm-3">設定角色</label> <select id="role-select-1" class="col-sm-8 form-control selectpicker show-tick" data-live-search="true"> </select> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal">關閉</button> <button type="button" class="btn btn-primary add-user">確定</button> </div> </div> </div> </div> ......

user-mgmt.js

//新增使用者,是否通過所有校驗(使用者名稱、郵箱唯一性等等),false代表沒有通過校驗
var insertCheck = true;

//儲存角色資訊
var roles = {};

//獲取所有角色資訊
function initRoles() {
    $.ajax({
        type: 'GET' ,
        url: '/role/getAll' ,
        dataType: 'json' ,
        success: function (res) {
            if (res.code != 200) {
                toastr.error(res.msg);
            } else {
                var roles = res.data;


                $('#role-select-1').append('<option value="0">請選擇</option>');
                $('#role-select-2').append('<option value="0">請選擇</option>');
                for (var index in roles) {
                    var role = roles[index];
                    var id = role.id;
                    var name = role.name;
                    $('#role-select-1').append("<option value='" + id + "'>" + name + "</option>");
                    $('#role-select-2').append("<option value='" + id + "'>" + name + "</option>");
                }


                $('.selectpicker').selectpicker('refresh');
            }
        }
    });
}

//初始化toastr外掛
function initToastr() {
    toastr.options = {
        "closeButton": false , //是否顯示關閉按鈕
        "debug": false , //是否使用debug模式
        "positionClass": "toast-top-center" , //彈出窗的位置
        "showDuration": "300" , //顯示的動畫時間
        "hideDuration": "1000" , //消失的動畫時間
        "timeOut": "2000" , //展現時間
        "extendedTimeOut": "1000" , //加長展示時間
        "showEasing": "swing" ,  //顯示時的動畫緩衝方式
        "hideEasing": "linear" , //消失時的動畫緩衝方式
        "showMethod": "fadeIn" , //顯示時的動畫方式
        "hideMethod": "fadeOut"  //消失時的動畫方式
    };
}

$('.add-user').click(function () {

    if (!insertCheck) {
        toastr.warning('引數校驗不通過!');
        return;
    }

    var userName = $('#user-name').val();
    var isAdmin = $("input[name='is-admin']:checked").val();
    var status = $("input[name='user-status']:checked").val();
    var email = $('#user-email').val();

    if (userName == undefined || userName == "") {
        toastr.warning('使用者名稱不能為空!');
        return;
    }

    if (email == undefined || email == "") {
        toastr.warning('使用者郵箱不能為空!');
        return;
    }

    $('#addModal').modal('hide');

    var user = {
        name : userName ,
        status : status == 1 ? true : false ,
        email : email ,
        isAdmin : isAdmin == 1 ? true : false
    };

    var roleId =  $('button[data-id=role-select-1] .filter-option').attr("value");

    if (roleId == "0" || roleId == undefined || roleId == null) {
        toastr.warning('請選擇使用者角色!');
        return;
    }

    $.ajax({
        type: 'POST' ,
        url: '/user/add' ,
        data: JSON.stringify({
            user : user ,
            roleId : roleId
        }) ,
        contentType: "application/json" ,
        dataType: 'json' ,
        success: function (res) {
            if (res.code != 200) {
                toastr.error(res.msg);
            } else {
                toastr.info(res.msg);
                $table.bootstrapTable('refresh');
            }
        }
    });
});

//校驗郵箱
function isEmail(strEmail) {

    if (strEmail.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) {
        return true;
    }
    return false;
}

//校驗使用者名稱的唯一性
$('#user-name').blur(function () {

    $('.name-img').empty();

    var name = $('#user-name').val();

    if (name == undefined || name == null || name == '') {
       return;
    }

    $.ajax({
       type: 'POST' ,
       url: '/user/getByName' ,
       data: {name : name},
       dataType: 'json' ,
       success: function (res) {
           if (res.code != 200) {
               insertCheck = false;
               $('.name-img').append('<img src="/resources/images/wrong.png" width="20px" height="20px"/>');
               toastr.error(res.msg);
           } else {
               insertCheck = true;
               $('.name-img').append('<img src="/resources/images/right.png" width="20px" height="20px"/>');
           }
       }
    });

});

//校驗郵箱的唯一性
$('#user-email').blur(function () {

    $('.email-img').empty();

    var email = $('#user-email').val();


    if (email == undefined || email == null || email == '') {
        return;
    }

    if (!isEmail(email)) {
        toastr.warning("郵箱格式不正確!");
        return;
    }

    $.ajax({
        type: 'POST' ,
        url: '/user/getByEmail' ,
        data: {email : email},
        dataType: 'json' ,
        success: function (res) {
            if (res.code != 200) {
                insertCheck = false;
                $('.email-img').append('<img src="/resources/images/wrong.png" width="20px" height="20px"/>');
                toastr.error(res.msg);
            } else {
                insertCheck = true;
                $('.email-img').append('<img src="/resources/images/right.png" width="20px" height="20px"/>');
            }
        }
    });

});

//下拉列表選中
$('#role-select-1 , #role-select-2').on('changed.bs.select ' , function (event, clickedIndex) {
    var roleId = event.delegateTarget.options[clickedIndex].value;
    //設定屬性
    $('button[data-id=role-select-1] .filter-option').attr("value" , roleId);
    $('button[data-id=role-select-2] .filter-option').attr("value" , roleId);
});

//拖拽modal-header,modal移動
$('#addModal').draggable({
    cursor: "move",
    handle: '.modal-header'
});

GeneralResponse.java

package com.xll.util;

/**
 * 一個統一返回的類,封裝了返回給前端頁面的資訊
 * @author lonely.xia
 * @date 2017/10/17
 */
public class GeneralResponse<T> {

    /** 返回給頁面的資料 */
    T data;

    /** 返回操作執行的結果 */
    String msg;

    /** 返回執行的狀態碼,操作執行成功一律返回200 */
    int code;

    public GeneralResponse(String msg , int code) {
        this.msg = msg;
        this.code = code;
    }

    public GeneralResponse() {}

    public void setData(T data) {
        this.data = data;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public T getData() {
        return data;
    }

    public String getMsg() {
        return msg;
    }

    public int getCode() {
        return code;
    }
}

ResponseEnum.java

package com.xll.enums;

 /**
 * 響應狀態碼列舉
 * Created by lonely.xia on 2017/10/17.
 */
public enum ResponseEnum {

    INSERT_SUCCESS("插入成功" , 200) ,
    INSERT_FAIL("插入失敗" , -101) ,
    INSERT_OR_UPDATE_ROLE_NAME_DUPLICATION("插入或更新重複角色名" , -102) ,
    UPDATE_SUCCESS("更新成功" , 200) ,
    UPDATE_FAIL("更新失敗" , -201) ,
    SELECT_SUCCESS("查詢成功" , 200) ,
    SELECT_FAIL("查詢失敗" , -301) ,
    DELETE_SUCCESS("刪除成功" , 200) ,
    DELETE_FAIL("刪除失敗" , -401) ,
    INSERT_NAME_OR_EMAIL_DUPLICATION("插入重複使用者名稱或郵箱" , -501) ,
    UPDATE_NAME_DUPLICATION("更新的使用者名稱已存在" , -601) ,
    UPDATE_EMAIL_DUPLICATION("更新的使用者郵箱已存在" , -701) ,
    INSERT_OR_UPDATE_TITLE_DUPLICATION("插入或更新重複的許可權TITLE" , -502) ,
    OK("成功" , 200);

    private String name;
    private int code;


    private ResponseEnum(String name , int code) {
        this.name = name;
        this.code = code;
    }

    public String getName() {
        return name;
    }

    public int getCode() {
        return code;
    }

}

UserController.java

@ResponseBody
@RequestMapping(value = "/getByName" , method = RequestMethod.POST)
public GeneralResponse<Integer> getByName(HttpServletRequest request , @RequestParam String name) {

    User result = userService.getByName(name);

    if (result != null) {
        return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
                , ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
    }

    return new GeneralResponse<>(ResponseEnum.OK.getName() , ResponseEnum.OK.getCode());

}

@ResponseBody
@RequestMapping(value = "/getByEmail" , method = RequestMethod.POST)
public GeneralResponse<Integer> getByEmail(HttpServletRequest request , @RequestParam String email) {

    User result = userService.getByEmail(email);

    if (result != null) {
        return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
                , ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
    }

    return new GeneralResponse<>(ResponseEnum.OK.getName() , ResponseEnum.OK.getCode());

}

@SystemLog(description = "新增使用者")
@ResponseBody
@RequestMapping(value = "/add" , method = RequestMethod.POST)
public GeneralResponse<Integer> add(HttpServletRequest request , @RequestBody UserDTO userDTO) {

    User user = userDTO.getUser();

    Integer roleId = userDTO.getRoleId();

    LOG.info("插入使用者資料為[使用者名稱:{},使用者郵箱:{},角色ID:{}]" , user.getName() , user.getEmail() , roleId);

    User result = userService.getUserByNameOrEmail(user);

    if (result != null) {
        return new GeneralResponse<>(ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getName()
                , ResponseEnum.INSERT_NAME_OR_EMAIL_DUPLICATION.getCode());
    }

    Integer count = userService.insert(user);

    if (count == 0) {
        return new GeneralResponse<>(ResponseEnum.INSERT_FAIL.getName() , ResponseEnum.INSERT_FAIL.getCode());
    }

    count = userRoleService.insert(user.getId() , roleId);

    if (count == 0) {
        return new GeneralResponse<>(ResponseEnum.INSERT_FAIL.getName() , ResponseEnum.INSERT_FAIL.getCode());
    }

    return new GeneralResponse<>(ResponseEnum.INSERT_SUCCESS.getName() , ResponseEnum.INSERT_SUCCESS.getCode());

}

UserServiceImpl.java

@Override
public User getUserByNameOrEmail(User user) {

    UserExample userExample = new UserExample();
    UserExample.Criteria nameCriteria = userExample.createCriteria();
    nameCriteria.andNameEqualTo(user.getName());

    UserExample.Criteria emailCriteria = userExample.createCriteria();
    emailCriteria.andEmailEqualTo(user.getEmail());

    userExample.or(emailCriteria);

    List<User> userList = userDao.selectByExample(userExample);

    if (userList == null || userList.size() == 0) {
        return null;
    }

    return userList.get(0);

}

@Override
public Integer insert(User user) {
    return userDao.insert(user);
}

@Override
public User getByName(String name) {

    UserExample userExample = new UserExample();
    UserExample.Criteria criteria = userExample.createCriteria();
    criteria.andNameEqualTo(name);

    List<User> userList = userDao.selectByExample(userExample);

    if (userList == null || userList.size() == 0) {
        return null;
    }

    return userList.get(0);
}

@Override
public User getByEmail(String email) {

    UserExample userExample = new UserExample();
    UserExample.Criteria criteria = userExample.createCriteria();
    criteria.andEmailEqualTo(email);

    List<User> userList = userDao.selectByExample(userExample);

    if (userList == null || userList.size() == 0) {
        return null;
    }

    return userList.get(0);
}