feat: 添加组织成员角色

This commit is contained in:
chenjianxing 2020-11-16 15:53:03 +08:00
parent 2c47bcc073
commit acaddcbe7a
10 changed files with 54 additions and 5 deletions

3
.gitignore vendored
View File

@ -30,4 +30,5 @@ target
.settings .settings
.project .project
.classpath .classpath
.jython_cache .jython_cache
qywx.json

View File

@ -49,8 +49,16 @@
<select id="getOrgMemberList" resultType="io.metersphere.base.domain.User"> <select id="getOrgMemberList" resultType="io.metersphere.base.domain.User">
SELECT DISTINCT * FROM ( SELECT DISTINCT * FROM (
SELECT `user`.* FROM user_role JOIN `user` ON user_role.user_id = `user`.id SELECT `user`.*
WHERE user_role.source_id = #{orgMember.organizationId} FROM user_role JOIN `user`
ON user_role.user_id = `user`.id
WHERE user_role.source_id in
(
SELECT id FROM workspace w
WHERE w.organization_id = #{orgMember.organizationId}
UNION
SELECT #{orgMember.organizationId} AS id FROM dual
)
<if test="orgMember.name != null"> <if test="orgMember.name != null">
AND `user`.name like CONCAT('%', #{orgMember.name},'%') AND `user`.name like CONCAT('%', #{orgMember.name},'%')
</if> </if>

View File

@ -3,6 +3,7 @@ package io.metersphere.commons.constants;
public class RoleConstants { public class RoleConstants {
public final static String ADMIN = "admin"; public final static String ADMIN = "admin";
public final static String ORG_ADMIN = "org_admin"; public final static String ORG_ADMIN = "org_admin";
public final static String ORG_MEMBER = "org_member";
public final static String TEST_VIEWER = "test_viewer"; public final static String TEST_VIEWER = "test_viewer";
public final static String TEST_MANAGER = "test_manager"; public final static String TEST_MANAGER = "test_manager";
public final static String TEST_USER = "test_user"; public final static String TEST_USER = "test_user";

View File

@ -171,12 +171,11 @@ public class OrganizationService {
SessionUser sessionUser = SessionUtils.getUser(); SessionUser sessionUser = SessionUtils.getUser();
UserDTO user = userService.getUserDTO(sessionUser.getId()); UserDTO user = userService.getUserDTO(sessionUser.getId());
List<String> collect = user.getUserRoles().stream() List<String> collect = user.getUserRoles().stream()
.filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId())) .filter(ur -> RoleConstants.ORG_ADMIN.equals(ur.getRoleId()) || RoleConstants.ORG_MEMBER.equals(ur.getRoleId()))
.map(UserRole::getSourceId) .map(UserRole::getSourceId)
.collect(Collectors.toList()); .collect(Collectors.toList());
if (!collect.contains(organizationId)) { if (!collect.contains(organizationId)) {
MSException.throwException(Translator.get("organization_does_not_belong_to_user")); MSException.throwException(Translator.get("organization_does_not_belong_to_user"));
} }
} }
} }

View File

@ -0,0 +1,2 @@
INSERT INTO role (id, name, description, type, create_time, update_time)
VALUES ('org_member', '组织成员', NULL, NULL, unix_timestamp() * 1000, unix_timestamp() * 1000);

View File

@ -165,6 +165,11 @@
for (let i = 0; i < this.tableData.length; i++) { for (let i = 0; i < this.tableData.length; i++) {
this.$get(url + "/" + encodeURIComponent(this.tableData[i].id), response => { this.$get(url + "/" + encodeURIComponent(this.tableData[i].id), response => {
let roles = response.data; let roles = response.data;
if (roles.length < 1) {
roles.push({
id : "org_member",
});
}
this.$set(this.tableData[i], "roles", roles); this.$set(this.tableData[i], "roles", roles);
}) })
} }

View File

@ -103,6 +103,21 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div v-if="role.id === 'org_member'">
<el-form-item :label="$t('organization.select_organization')"
:prop="'roles.' + index + '.ids'"
:rules="{required: true, message: $t('organization.select_organization'), trigger: 'change'}"
>
<el-select filterable v-model="role.ids" :placeholder="$t('organization.select_organization')" multiple>
<el-option
v-for="item in form.orgList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div v-if="role.id === 'test_manager'"> <div v-if="role.id === 'test_manager'">
<el-form-item :label="$t('workspace.select')" <el-form-item :label="$t('workspace.select')"
:prop="'roles.' + index + '.ids'" :prop="'roles.' + index + '.ids'"
@ -214,6 +229,21 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<div v-if="role.id === 'org_member'">
<el-form-item :label="$t('organization.select_organization')"
:prop="'roles.' + index + '.ids'"
:rules="{required: true, message: $t('organization.select_organization'), trigger: 'change'}"
>
<el-select filterable v-model="role.ids" :placeholder="$t('organization.select_organization')" multiple>
<el-option
v-for="item in form.orgList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</div>
<div v-if="role.id === 'test_manager'"> <div v-if="role.id === 'test_manager'">
<el-form-item :label="$t('workspace.select')" <el-form-item :label="$t('workspace.select')"
:prop="'roles.' + index + '.ids'" :prop="'roles.' + index + '.ids'"

View File

@ -336,6 +336,7 @@ export default {
please_choose_role: 'Please Choose Role', please_choose_role: 'Please Choose Role',
admin: 'Admin', admin: 'Admin',
org_admin: 'Org_Admin', org_admin: 'Org_Admin',
org_member: 'Org Member',
test_manager: 'Test Manager', test_manager: 'Test Manager',
test_user: 'Test User', test_user: 'Test User',
test_viewer: 'Read-only User', test_viewer: 'Read-only User',

View File

@ -335,6 +335,7 @@ export default {
please_choose_role: '请选择角色', please_choose_role: '请选择角色',
admin: '系统管理员', admin: '系统管理员',
org_admin: '组织管理员', org_admin: '组织管理员',
org_member: '组织成员',
test_manager: '测试经理', test_manager: '测试经理',
test_user: '测试人员', test_user: '测试人员',
test_viewer: '只读用户', test_viewer: '只读用户',

View File

@ -337,6 +337,7 @@ export default {
please_choose_role: '請選擇角色', please_choose_role: '請選擇角色',
admin: '系統管理員', admin: '系統管理員',
org_admin: '組織管理員', org_admin: '組織管理員',
org_member: '組織成員',
test_manager: '測試經理', test_manager: '測試經理',
test_user: '測試人員', test_user: '測試人員',
test_viewer: '只讀用戶', test_viewer: '只讀用戶',