mirror of https://github.com/Rekoe/rk_svnadmin
add
parent
d8c7cda742
commit
e74f71a78c
|
@ -2,10 +2,11 @@ package com.rekoe.domain;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import org.nutz.dao.entity.annotation.Comment;
|
||||
import org.nutz.dao.entity.annotation.Column;
|
||||
import org.nutz.dao.entity.annotation.Index;
|
||||
import org.nutz.dao.entity.annotation.Name;
|
||||
import org.nutz.dao.entity.annotation.PK;
|
||||
import org.nutz.dao.entity.annotation.Readonly;
|
||||
import org.nutz.dao.entity.annotation.Table;
|
||||
import org.nutz.dao.entity.annotation.TableIndexes;
|
||||
|
||||
|
@ -28,17 +29,17 @@ public class PjGrUsr implements Serializable {
|
|||
/**
|
||||
* 用户
|
||||
*/
|
||||
@Comment
|
||||
@Column
|
||||
private String usr;
|
||||
/**
|
||||
* 用户姓名
|
||||
*/
|
||||
@Comment
|
||||
@Readonly
|
||||
private String usrName;
|
||||
/**
|
||||
* 组
|
||||
*/
|
||||
@Comment
|
||||
@Column
|
||||
private String gr;
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,7 +28,8 @@ public class AdminProjectGroupAct extends BaseAction {
|
|||
@Ok("fm:template.admin.project_group.list")
|
||||
@RequiresPermissions({ "project.group:view" })
|
||||
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
|
||||
public Pagination list(@Param(value = "pageNumber", df = "1") Integer page, @Param("pj") String pj) {
|
||||
public Pagination list(@Param(value = "pageNumber", df = "1") Integer page, @Param("pj") String pj,HttpServletRequest req) {
|
||||
req.setAttribute("pj", pj);
|
||||
return projectGroupService.getObjListByPager(page, 20, Cnd.where("pj", "=", pj));
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
package com.rekoe.module.admin;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
import com.rekoe.annotation.PermissionTag;
|
||||
import com.rekoe.common.Message;
|
||||
import com.rekoe.common.page.Pagination;
|
||||
import com.rekoe.domain.PjGrUsr;
|
||||
import com.rekoe.module.BaseAction;
|
||||
import com.rekoe.service.ProjectGroupUsrService;
|
||||
import com.rekoe.service.SvnUserService;
|
||||
|
||||
@IocBean
|
||||
@At("/admin/project/group/usr")
|
||||
public class AdminProjectGroupUsrAct extends BaseAction {
|
||||
|
||||
@Inject
|
||||
private ProjectGroupUsrService projectGroupUsrService;
|
||||
|
||||
@At
|
||||
@Ok("fm:template.admin.project_group_usr.list")
|
||||
@RequiresPermissions({ "project.group:view" })
|
||||
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
|
||||
public Pagination list(@Param(value = "pageNumber", df = "1") int page, @Param("pj") String pj, @Param("gr") String gr, HttpServletRequest req) {
|
||||
req.setAttribute("pj", pj);
|
||||
req.setAttribute("gr", gr);
|
||||
return projectGroupUsrService.getObjListByPager(page, 20, Cnd.where("pj", "=", pj).and("gr", "=", gr));
|
||||
}
|
||||
|
||||
@Inject
|
||||
private SvnUserService svnUserService;
|
||||
|
||||
@At
|
||||
@Ok("fm:template.admin.project_group_usr.add")
|
||||
@RequiresPermissions({ "project.group:add" })
|
||||
@PermissionTag(name = "添加项目组用户", tag = "SVN账号管理", enable = true)
|
||||
public String add(@Param("pj") String pj, @Param("gr") String gr, HttpServletRequest req) {
|
||||
req.setAttribute("pj", pj);
|
||||
req.setAttribute("gr", gr);
|
||||
req.setAttribute("usrList", svnUserService.listUnSelected(pj, gr));
|
||||
return pj;
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json")
|
||||
@RequiresPermissions("project.group:add")
|
||||
@PermissionTag(name = "添加项目组用户", tag = "SVN账号管理", enable = false)
|
||||
public Message o_save(@Param("::pgu.") PjGrUsr group, HttpServletRequest req) {
|
||||
return Message.error("ok", req);
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("json")
|
||||
@RequiresPermissions("project.group:delete")
|
||||
@PermissionTag(name = "删除项目组用户", tag = "SVN账号管理", enable = true)
|
||||
public Message delete(@Param("pj") String pj, @Param("gr") String gr, @Param("usr") String usr, HttpServletRequest req) {
|
||||
projectGroupUsrService.delete(pj, gr, usr);
|
||||
return Message.success("ok", req);
|
||||
}
|
||||
}
|
|
@ -17,18 +17,18 @@ import com.rekoe.module.BaseAction;
|
|||
import com.rekoe.service.SvnUserService;
|
||||
|
||||
@IocBean
|
||||
@At("/admin/project/group")
|
||||
@At("/admin/svn/user")
|
||||
public class AdminSvnUserAct extends BaseAction {
|
||||
|
||||
@Inject
|
||||
private SvnUserService projectUserService;
|
||||
private SvnUserService svnUserService;
|
||||
|
||||
@At
|
||||
@Ok("fm:template.admin.project_group.list")
|
||||
@RequiresPermissions({ "project.group:view" })
|
||||
@PermissionTag(name = "SVN浏览账号", tag = "SVN账号管理")
|
||||
public Pagination list(@Param(value = "pageNumber", df = "1") int page) {
|
||||
return projectUserService.getObjListByPager(page, 20, null);
|
||||
return svnUserService.getObjListByPager(page, 20, null);
|
||||
}
|
||||
|
||||
@At
|
||||
|
@ -43,9 +43,9 @@ public class AdminSvnUserAct extends BaseAction {
|
|||
@RequiresPermissions("project.group:add")
|
||||
@PermissionTag(name = "SVN添加账号", tag = "SVN账号管理", enable = false)
|
||||
public Message o_save(@Param("::user.") Usr user, HttpServletRequest req) {
|
||||
boolean isOk = projectUserService.nameOk(user.getUsr());
|
||||
boolean isOk = svnUserService.nameOk(user.getUsr());
|
||||
if (isOk) {
|
||||
isOk = projectUserService.insert(user);
|
||||
isOk = svnUserService.insert(user);
|
||||
}
|
||||
if (isOk) {
|
||||
return Message.success("ok", req);
|
||||
|
|
|
@ -1,10 +1,18 @@
|
|||
package com.rekoe.service;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.sql.SqlCallback;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
|
||||
|
@ -23,7 +31,7 @@ public class SvnUserService extends BaseService<Usr> {
|
|||
|
||||
public SvnUserService() {
|
||||
}
|
||||
|
||||
|
||||
public SvnUserService(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
@ -47,4 +55,40 @@ public class SvnUserService extends BaseService<Usr> {
|
|||
public boolean isUsername(String username) {
|
||||
return Pattern.matches(REGEX_USERNAME, username);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取这个项目组未选的用户(不包括*)
|
||||
*
|
||||
* @param pj
|
||||
* 项目
|
||||
* @param gr
|
||||
* 组
|
||||
* @return 项目组未选的用户(不包括*)
|
||||
*/
|
||||
public List<Usr> listUnSelected(String pj, String gr) {
|
||||
Sql sql = Sqls.create("select usr,name,psw,role from usr a where a.usr <> '*' " + " and not exists (select usr from pj_gr_usr b where a.usr = b.usr and b.pj=@pj and b.gr=@gr) order by a.usr");
|
||||
sql.setParam("pj", pj).setParam("gr", gr);
|
||||
final List<Usr> list = new ArrayList<Usr>();
|
||||
sql.setCallback(new SqlCallback() {
|
||||
|
||||
@Override
|
||||
public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException {
|
||||
while (rs.next()) {
|
||||
list.add(readUsr(rs));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
});
|
||||
dao().execute(sql);
|
||||
return list;
|
||||
}
|
||||
|
||||
Usr readUsr(ResultSet rs) throws SQLException {
|
||||
Usr result = new Usr();
|
||||
result.setUsr(rs.getString("usr"));
|
||||
result.setName(rs.getString("name"));
|
||||
result.setPsw(rs.getString("psw"));
|
||||
result.setRole(rs.getString("role"));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,21 +12,18 @@ $(function() {
|
|||
</head>
|
||||
<body>
|
||||
<div class="box-positon">
|
||||
<div class="rpos"><@s.m "global.position"/>: SVN账号 - <@s.m "global.add"/></div>
|
||||
<div class="rpos"><@s.m "global.position"/>: SVN项目组账号 - <@s.m "global.add"/></div>
|
||||
<form class="ropt">
|
||||
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='list.rk';" class="return-button"/>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="body-box">
|
||||
<@p.form id="jvForm" action="o_update" labelWidth="12" onsubmit="return false;">
|
||||
<@p.text width="30" label="姓名" id="user.name" name="user.name" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.text width="30" label="用户名" id="user.usr" name="user.usr" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.text width="30" label="密码" id="user.psw" name="user.psw" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.text width="30" label="邮箱地址" id="user.email" name="user.email" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.td width="50" label="角色" required="true">
|
||||
<@p.select id="user.role" name="user.role" value='0' list={"guest":"选择角色","admin":"admin"} required="true"/>
|
||||
</@p.td><@p.tr/>
|
||||
<@p.form id="jvForm" action="o_save" labelWidth="12" onsubmit="return false;">
|
||||
<@p.hidden name="pgu.pj" value='${obj}' />
|
||||
<@p.text width="30" label="项目" id="pgu.pj" name="pgu.pj" value="${obj}" maxlength="100" class="required" required="true" readonly="true"/><@p.tr/>
|
||||
<@p.text width="30" label="用户组" id="pgu.gr" name="pgu.gr" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.text width="30" label="描述" id="pgu.des" name="pgu.des" value="" maxlength="100" class="required" required="true"/><@p.tr/>
|
||||
<@p.td colspan="2">
|
||||
<@p.submit code="global.submit" onclick="Cms.add();"/>
|
||||
</@p.td><@p.tr/>
|
||||
|
|
|
@ -39,6 +39,7 @@ function deleted(pj,gr){
|
|||
<div class="box-positon">
|
||||
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.list"/></div>
|
||||
<form class="ropt">
|
||||
<input type="hidden" name="pj" id="pj" value="${pj}"/>
|
||||
<input type="submit" class="add" value="<@s.m "global.add"/>" onclick="this.form.action='add';"/>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
|
@ -51,7 +52,7 @@ function deleted(pj,gr){
|
|||
<@p.column title="项目" align="center">${group.pj}</@p.column><#t/>
|
||||
<@p.column title="用户组" align="center">${group.gr}</@p.column><#t/>
|
||||
<@p.column title="描述" align="center">${group.des!}</@p.column><#t/>
|
||||
<@p.column title="设置用户" align="center">设置用户</@p.column><#t/>
|
||||
<@p.column title="设置用户" align="center"><a href="${base}/admin/project/group/usr/list?pageNumber=1&pj=${group.pj}&gr=${group.gr}">设置用户</a></@p.column><#t/>
|
||||
<@shiro.hasPermission name="project.group:delete">
|
||||
<@p.column title="删除" align="center">
|
||||
<#if group.gr != "manager"><a href="javascript:void(0);" onclick="deleted('${group.pj}','${group.gr}')" class="pn-opt">删除</a></#if><#rt/>
|
||||
|
|
|
@ -0,0 +1,112 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<title></title>
|
||||
<#include "/template/admin/head.ftl"/>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("#jvForm").validate();
|
||||
//移到右边
|
||||
$('#add').click(function() {
|
||||
//获取选中的选项,删除并追加给对方
|
||||
$('#select1 option:selected').appendTo('#select2');
|
||||
});
|
||||
//移到左边
|
||||
$('#remove').click(function() {
|
||||
$('#select2 option:selected').appendTo('#select1');
|
||||
});
|
||||
//全部移到右边
|
||||
$('#add_all').click(function() {
|
||||
//获取全部的选项,删除并追加给对方
|
||||
$('#select1 option').appendTo('#select2');
|
||||
});
|
||||
//全部移到左边
|
||||
$('#remove_all').click(function() {
|
||||
$('#select2 option').appendTo('#select1');
|
||||
});
|
||||
//双击选项
|
||||
$('#select1').dblclick(function(){ //绑定双击事件
|
||||
//获取全部的选项,删除并追加给对方
|
||||
$("option:selected",this).appendTo('#select2'); //追加给对方
|
||||
});
|
||||
//双击选项
|
||||
$('#select2').dblclick(function(){
|
||||
$("option:selected",this).appendTo('#select1');
|
||||
});
|
||||
});
|
||||
function checkForm(f){
|
||||
var x = f.elements["usrs"];
|
||||
if(x.value==""){
|
||||
alert("用户不可以为空");
|
||||
f.elements["usrs"].focus();
|
||||
return false;
|
||||
}
|
||||
var s="";
|
||||
for (var i=0;i<x.length;i++)
|
||||
{
|
||||
s += x[i].value;
|
||||
s += ",";
|
||||
}
|
||||
$.dialog({
|
||||
type: "warn",
|
||||
content: '确定要添加此记录?',
|
||||
ok: 'Ok',
|
||||
cancel: 'Cancel',
|
||||
onOk: function() {
|
||||
$.ajax({
|
||||
url: "o_save.rk",
|
||||
type: "POST",
|
||||
data: {"pj":'${pj}',"gr":'${gr}',"usrs":s},
|
||||
dataType: "json",
|
||||
cache: false,
|
||||
success: function(message) {
|
||||
$.message(message);
|
||||
if (message.type == "success")
|
||||
{
|
||||
window.location.href = "list.rk"
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="box-positon">
|
||||
<div class="rpos"><@s.m "global.position"/>: SVN项目组账号 - <@s.m "global.add"/></div>
|
||||
<form class="ropt">
|
||||
<input type="hidden" name="pj" id="pj" value="${pj}" />
|
||||
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='${base}/admin/project/group/list.rk';" class="return-button"/>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="body-box">
|
||||
<@p.form action="o_save" method="post" labelWidth="12" onsubmit="return checkForm(this);">
|
||||
<@p.hidden name="pgu.pj" id="pgu.pj" value="${pj}" />
|
||||
<@p.hidden name="pgu.gr" id="gr" value="${gr}" />
|
||||
<@p.td width="50"required="true">
|
||||
<select multiple="multiple" id="select1" style="height: 150px;width: 480px;">
|
||||
<#list usrList as usr>
|
||||
<option value="${usr.usr}">${usr.name!usr.usr}(${usr.usr})</option>
|
||||
</#list>
|
||||
</select>
|
||||
</@p.td>
|
||||
<@p.td width="50" required="true">
|
||||
<input id="add" type="button" value=">" style="width:30px;"><br>
|
||||
<input id="add_all" type="button" value=">>" style="width:30px;"><br><br>
|
||||
<input id="remove" type="button" value="<" style="width:30px;"><br>
|
||||
<input id="remove_all" type="button" value="<<" style="width:30px;"><br><br>
|
||||
</@p.td>
|
||||
<@p.td width="50" required="true">
|
||||
<select id="select2" name="usrs" multiple="multiple" style="height: 150px;width: 480px;"></select>
|
||||
</@p.td><@p.tr/>
|
||||
<@p.td colspan="3">
|
||||
<@p.submit code="global.submit"/>
|
||||
</@p.td><@p.tr/>
|
||||
</@p.form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,31 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<title></title>
|
||||
<#include "/template/admin/head.ftl"/>
|
||||
<script type="text/javascript">
|
||||
$(function() {
|
||||
$("#jvForm").validate();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="box-positon">
|
||||
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.edit"/></div>
|
||||
<form class="ropt">
|
||||
<input type="submit" value="<@s.m "global.backToList"/>" onclick="this.form.action='list.rk';" class="return-button"/>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="body-box">
|
||||
<@p.form id="jvForm" action="o_update" labelWidth="12" onsubmit="return false;">
|
||||
<@p.hidden name="user.id" value='${obj.id}' />
|
||||
<@p.text width="30" label="名称" id="user.userName" name="user.userName" value="${obj.userName!}" maxlength="100" class="required" required="true" readonly="true"/><@p.tr/>
|
||||
<@p.td colspan="2">
|
||||
<@p.submit code="global.submit" onclick="Cms.update();"/>
|
||||
</@p.td><@p.tr/>
|
||||
</@p.form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,66 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<title></title>
|
||||
<#include "/template/admin/head.ftl"/>
|
||||
<script type="text/javascript">
|
||||
function getTableForm() {
|
||||
return document.getElementById('tableForm');
|
||||
}
|
||||
function deleted(pj,gr,usr){
|
||||
$.dialog({
|
||||
type: "warn",
|
||||
content: '确定要删除此记录?',
|
||||
ok: 'Ok',
|
||||
cancel: 'Cancel',
|
||||
onOk: function() {
|
||||
$.ajax({
|
||||
url: "delete.rk",
|
||||
type: "POST",
|
||||
data: {"pj":pj,"gr":gr,"usr":usr},
|
||||
dataType: "json",
|
||||
cache: false,
|
||||
success: function(message) {
|
||||
$.message(message);
|
||||
if (message.type == "success")
|
||||
{
|
||||
window.location.href = back;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="box-positon">
|
||||
<div class="rpos"><@s.m "global.position"/>: OauthUser - <@s.m "global.list"/></div>
|
||||
<form class="ropt">
|
||||
<input type="hidden" name="pj" id="pj" value="${pj}"/>
|
||||
<input type="hidden" name="gr" id="pj" value="${gr}"/>
|
||||
<input type="submit" class="add" value="<@s.m "global.add"/>" onclick="this.form.action='add';"/>
|
||||
</form>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<div class="body-box">
|
||||
<@p.form id="tableForm" method="post">
|
||||
<@p.hidden name="pageNumber" value="${pageNo!}" />
|
||||
<@p.table value=obj;group,i,has_next><#rt/>
|
||||
<@p.column title="ID" align="center">${i+1}</@p.column><#t/>
|
||||
<@p.column title="项目" align="center">${group.pj}</@p.column><#t/>
|
||||
<@p.column title="用户组" align="center">${group.gr}</@p.column><#t/>
|
||||
<@p.column title="用户名" align="center">${group.usr!}</@p.column><#t/>
|
||||
<@p.column title="姓名" align="center">${group.usrName}</@p.column><#t/>
|
||||
<@shiro.hasPermission name="project.group:delete">
|
||||
<@p.column title="删除" align="center">
|
||||
<#if group.gr != "manager"><a href="javascript:void(0);" onclick="deleted('${group.pj}','${group.gr}')" class="pn-opt">删除</a></#if><#rt/>
|
||||
</@p.column><#t/>
|
||||
</@shiro.hasPermission>
|
||||
</@p.table>
|
||||
</@p.form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -40,7 +40,7 @@ Cms.lmenu = function(id) {
|
|||
});
|
||||
});
|
||||
}
|
||||
Cms.add = function(id){
|
||||
Cms.add = function(){
|
||||
$.dialog({
|
||||
type: "warn",
|
||||
content: '确定要添加此记录?',
|
||||
|
|
Loading…
Reference in New Issue