diff --git a/controllers/permission.go b/controllers/permission.go index 8f3cdafc..2dd40f1c 100644 --- a/controllers/permission.go +++ b/controllers/permission.go @@ -48,6 +48,24 @@ func (c *ApiController) GetPermissions() { } } +// GetPermissionsBySubmitter +// @Title GetPermissionsBySubmitter +// @Tag Permission API +// @Description get permissions by submitter +// @Success 200 {array} object.Permission The Response object +// @router /get-permissions-by-submitter [get] +func (c *ApiController) GetPermissionsBySubmitter() { + userId, ok := c.RequireSignedIn() + if !ok { + return + } + + owner, username := util.GetOwnerAndNameFromId(userId) + permissions := object.GetPermissionsBySubmitter(owner, username) + c.ResponseOk(permissions, len(permissions)) + return +} + // GetPermission // @Title GetPermission // @Tag Permission API diff --git a/object/permission.go b/object/permission.go index 99090c5e..f2193016 100644 --- a/object/permission.go +++ b/object/permission.go @@ -36,8 +36,12 @@ type Permission struct { Resources []string `xorm:"mediumtext" json:"resources"` Actions []string `xorm:"mediumtext" json:"actions"` Effect string `xorm:"varchar(100)" json:"effect"` + IsEnabled bool `json:"isEnabled"` - IsEnabled bool `json:"isEnabled"` + Submitter string `xorm:"varchar(100)" json:"submitter"` + Approver string `xorm:"varchar(100)" json:"approver"` + ApproveTime string `xorm:"varchar(100)" json:"approveTime"` + State string `xorm:"varchar(100)" json:"state"` } type PermissionRule struct { @@ -163,3 +167,13 @@ func GetPermissionsByUser(userId string) []*Permission { return permissions } + +func GetPermissionsBySubmitter(owner string, submitter string) []*Permission { + permissions := []*Permission{} + err := adapter.Engine.Desc("created_time").Find(&permissions, &Permission{Owner: owner, Submitter: submitter}) + if err != nil { + panic(err) + } + + return permissions +} diff --git a/routers/router.go b/routers/router.go index ca59fabe..bb4e4ea6 100644 --- a/routers/router.go +++ b/routers/router.go @@ -78,6 +78,7 @@ func initAPI() { beego.Router("/api/delete-role", &controllers.ApiController{}, "POST:DeleteRole") beego.Router("/api/get-permissions", &controllers.ApiController{}, "GET:GetPermissions") + beego.Router("/api/get-permissions-by-submitter", &controllers.ApiController{}, "GET:GetPermissionsBySubmitter") beego.Router("/api/get-permission", &controllers.ApiController{}, "GET:GetPermission") beego.Router("/api/update-permission", &controllers.ApiController{}, "POST:UpdatePermission") beego.Router("/api/add-permission", &controllers.ApiController{}, "POST:AddPermission") diff --git a/web/src/App.js b/web/src/App.js index 960df1bc..98c9e23a 100644 --- a/web/src/App.js +++ b/web/src/App.js @@ -385,13 +385,17 @@ class App extends Component { ); - res.push( - - - {i18next.t("general:Permissions")} - - - ); + } + + res.push( + + + {i18next.t("general:Permissions")} + + + ); + + if (Setting.isAdminUser(this.state.account)) { res.push( diff --git a/web/src/PermissionEditPage.js b/web/src/PermissionEditPage.js index 6bf3a0a2..5a8dfb2b 100644 --- a/web/src/PermissionEditPage.js +++ b/web/src/PermissionEditPage.js @@ -22,6 +22,7 @@ import i18next from "i18next"; import * as RoleBackend from "./backend/RoleBackend"; import * as ModelBackend from "./backend/ModelBackend"; import * as ApplicationBackend from "./backend/ApplicationBackend"; +import moment from "moment/moment"; const {Option} = Select; @@ -297,6 +298,63 @@ class PermissionEditPage extends React.Component { }} /> + + + {Setting.getLabel(i18next.t("permission:Submitter"), i18next.t("permission:Submitter - Tooltip"))} : + + + { + this.updatePermissionField("submitter", e.target.value); + }} /> + + + + + {Setting.getLabel(i18next.t("permission:Approver"), i18next.t("permission:Approver - Tooltip"))} : + + + { + this.updatePermissionField("approver", e.target.value); + }} /> + + + + + {Setting.getLabel(i18next.t("permission:Approve time"), i18next.t("permission:Approve time - Tooltip"))} : + + + { + this.updatePermissionField("approveTime", e.target.value); + }} /> + + + + + {Setting.getLabel(i18next.t("permission:State"), i18next.t("permission:State - Tooltip"))} : + + + + + ); } diff --git a/web/src/PermissionListPage.js b/web/src/PermissionListPage.js index 73a82972..a256b54e 100644 --- a/web/src/PermissionListPage.js +++ b/web/src/PermissionListPage.js @@ -25,11 +25,11 @@ class PermissionListPage extends BaseListPage { newPermission() { const randomName = Setting.getRandomName(); return { - owner: "built-in", + owner: this.props.account.owner, name: `permission_${randomName}`, createdTime: moment().format(), displayName: `New Permission - ${randomName}`, - users: [], + users: [this.props.account.name], roles: [], domains: [], resourceType: "Application", @@ -37,6 +37,10 @@ class PermissionListPage extends BaseListPage { actions: ["Read"], effect: "Allow", isEnabled: true, + submitter: this.props.account.name, + approver: "", + approveTime: "", + state: "Pending", }; } @@ -44,6 +48,10 @@ class PermissionListPage extends BaseListPage { const newPermission = this.newPermission(); PermissionBackend.addPermission(newPermission) .then((res) => { + if (res.msg !== "") { + Setting.showMessage("error", res.msg); + return; + } this.props.history.push({pathname: `/permissions/${newPermission.owner}/${newPermission.name}`, mode: "add"}); } ) @@ -260,7 +268,9 @@ class PermissionListPage extends BaseListPage { value = params.type; } this.setState({loading: true}); - PermissionBackend.getPermissions("", params.pagination.current, params.pagination.pageSize, field, value, sortField, sortOrder) + + const getPermissions = Setting.isAdminUser(this.props.account) ? PermissionBackend.getPermissions : PermissionBackend.getPermissionsBySubmitter; + getPermissions("", params.pagination.current, params.pagination.pageSize, field, value, sortField, sortOrder) .then((res) => { if (res.status === "ok") { this.setState({ diff --git a/web/src/Setting.js b/web/src/Setting.js index 78eb7a04..887a1105 100644 --- a/web/src/Setting.js +++ b/web/src/Setting.js @@ -373,6 +373,13 @@ export function isAdminUser(account) { return account.owner === "built-in" || account.isGlobalAdmin === true; } +export function isLocalAdminUser(account) { + if (account === undefined || account === null) { + return false; + } + return account.isAdmin === true || isAdminUser(account); +} + export function deepCopy(obj) { return Object.assign({}, obj); } diff --git a/web/src/backend/PermissionBackend.js b/web/src/backend/PermissionBackend.js index 43f86b6f..5611bfd6 100644 --- a/web/src/backend/PermissionBackend.js +++ b/web/src/backend/PermissionBackend.js @@ -21,6 +21,13 @@ export function getPermissions(owner, page = "", pageSize = "", field = "", valu }).then(res => res.json()); } +export function getPermissionsBySubmitter() { + return fetch(`${Setting.ServerUrl}/api/get-permissions-by-submitter`, { + method: "GET", + credentials: "include", + }).then(res => res.json()); +} + export function getPermission(owner, name) { return fetch(`${Setting.ServerUrl}/api/get-permission?id=${owner}/${encodeURIComponent(name)}`, { method: "GET", diff --git a/web/src/locales/de/data.json b/web/src/locales/de/data.json index d9cb1a27..57d8b251 100644 --- a/web/src/locales/de/data.json +++ b/web/src/locales/de/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "Aktionen", "Actions - Tooltip": "Aktionen - Tooltip", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "Berechtigung bearbeiten", "Effect": "Effekt", "Effect - Tooltip": "Effekt - Tooltip", @@ -350,7 +354,11 @@ "Resource type": "Ressourcentyp", "Resource type - Tooltip": "Ressourcentyp - Tooltip", "Resources": "Ressourcen", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "Rolle bearbeiten", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "Unterrollen", "Sub roles - Tooltip": "Unterrollen - Tooltip", "Sub users": "Unternutzer", diff --git a/web/src/locales/en/data.json b/web/src/locales/en/data.json index 0212f0f6..5d8383cc 100644 --- a/web/src/locales/en/data.json +++ b/web/src/locales/en/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "Actions", "Actions - Tooltip": "Actions - Tooltip", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "Edit Permission", "Effect": "Effect", "Effect - Tooltip": "Effect - Tooltip", @@ -350,7 +354,11 @@ "Resource type": "Resource type", "Resource type - Tooltip": "Resource type - Tooltip", "Resources": "Resources", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "Edit Role", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "Sub roles", "Sub roles - Tooltip": "Sub roles - Tooltip", "Sub users": "Sub users", diff --git a/web/src/locales/fr/data.json b/web/src/locales/fr/data.json index 24f5c0bc..0f2b7e71 100644 --- a/web/src/locales/fr/data.json +++ b/web/src/locales/fr/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "Actions", "Actions - Tooltip": "Actions - Info-bulle", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "Autorisation d'édition", "Effect": "Effet", "Effect - Tooltip": "Effet - Infobulle", @@ -350,7 +354,11 @@ "Resource type": "Type de ressource", "Resource type - Tooltip": "Type de ressource - infobulle", "Resources": "Ressource", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "Modifier le rôle", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "Sous-rôles", "Sub roles - Tooltip": "Sous-rôles - infobulle", "Sub users": "Sous-utilisateurs", diff --git a/web/src/locales/ja/data.json b/web/src/locales/ja/data.json index 0487a09a..1561633b 100644 --- a/web/src/locales/ja/data.json +++ b/web/src/locales/ja/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "アクション", "Actions - Tooltip": "アクション → ツールチップ", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "権限を編集", "Effect": "効果", "Effect - Tooltip": "エフェクト - ツールチップ", @@ -350,7 +354,11 @@ "Resource type": "リソースタイプ", "Resource type - Tooltip": "リソースタイプ - ツールチップ", "Resources": "リソース", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "役割を編集", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "サブロール", "Sub roles - Tooltip": "Sub roles - Tooltip", "Sub users": "サブユーザー", diff --git a/web/src/locales/ko/data.json b/web/src/locales/ko/data.json index 09b30879..04af7c77 100644 --- a/web/src/locales/ko/data.json +++ b/web/src/locales/ko/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "Actions", "Actions - Tooltip": "Actions - Tooltip", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "Edit Permission", "Effect": "Effect", "Effect - Tooltip": "Effect - Tooltip", @@ -350,7 +354,11 @@ "Resource type": "Resource type", "Resource type - Tooltip": "Resource type - Tooltip", "Resources": "Resources", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "Edit Role", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "Sub roles", "Sub roles - Tooltip": "Sub roles - Tooltip", "Sub users": "Sub users", diff --git a/web/src/locales/ru/data.json b/web/src/locales/ru/data.json index 4d338602..6684fef8 100644 --- a/web/src/locales/ru/data.json +++ b/web/src/locales/ru/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "Действия", "Actions - Tooltip": "Действия - Подсказка", + "Approve time": "Approve time", + "Approve time - Tooltip": "Approve time - Tooltip", + "Approver": "Approver", + "Approver - Tooltip": "Approver - Tooltip", "Edit Permission": "Изменить права доступа", "Effect": "Эффект", "Effect - Tooltip": "Эффект - Подсказка", @@ -350,7 +354,11 @@ "Resource type": "Тип ресурса", "Resource type - Tooltip": "Тип ресурса - Подсказка", "Resources": "Ресурсы", - "Resources - Tooltip": "Resources - Tooltip" + "Resources - Tooltip": "Resources - Tooltip", + "State": "State", + "State - Tooltip": "State - Tooltip", + "Submitter": "Submitter", + "Submitter - Tooltip": "Submitter - Tooltip" }, "product": { "Alipay": "Alipay", @@ -519,6 +527,8 @@ "role": { "Edit Role": "Изменить роль", "New Role": "New Role", + "Sub domains": "Sub domains", + "Sub domains - Tooltip": "Sub domains - Tooltip", "Sub roles": "Суб роли", "Sub roles - Tooltip": "Суб роли - Tooltip", "Sub users": "Субпользователи", diff --git a/web/src/locales/zh/data.json b/web/src/locales/zh/data.json index 8a0ff24e..4674d326 100644 --- a/web/src/locales/zh/data.json +++ b/web/src/locales/zh/data.json @@ -343,6 +343,10 @@ "permission": { "Actions": "动作", "Actions - Tooltip": "授权的动作", + "Approve time": "审批时间", + "Approve time - Tooltip": "该授权被审批通过的时间", + "Approver": "审批者", + "Approver - Tooltip": "审批通过该授权的人", "Edit Permission": "编辑权限", "Effect": "效果", "Effect - Tooltip": "允许还是拒绝", @@ -350,7 +354,11 @@ "Resource type": "资源类型", "Resource type - Tooltip": "授权资源的类型", "Resources": "资源", - "Resources - Tooltip": "被授权的资源" + "Resources - Tooltip": "被授权的资源", + "State": "审批状态", + "State - Tooltip": "该授权现在的状态", + "Submitter": "申请者", + "Submitter - Tooltip": "申请该授权的人" }, "product": { "Alipay": "支付宝", @@ -519,6 +527,8 @@ "role": { "Edit Role": "编辑角色", "New Role": "添加角色", + "Sub domains": "包含域", + "Sub domains - Tooltip": "当前角色所包含的子域", "Sub roles": "包含角色", "Sub roles - Tooltip": "当前角色所包含的子角色", "Sub users": "包含用户",