fix: disable roles inputbox when model doesn't support RBAC (#1201)

* feat:Support simple ldap server

* fix:fix review problems

* fix:fix review problems

* fix: fix ldapserver crash bug

* Update ldapserver.go

* fix: fix dulpicate go routines

* fix gofumpt problems

* fix: fix UserList error

* feat:disable 'sub role' when model is incorrect

* feat:disable 'sub role' when model is incorrect

* feat:disable 'sub role' when model is incorrect

* delete useless output

* update func name

* Update PermissionEditPage.js

* Update PermissionEditPage.js

Co-authored-by: Yang Luo <hsluoyz@qq.com>
This commit is contained in:
Mr Forest
2022-10-10 00:53:55 +08:00
committed by GitHub
parent 87da3dad76
commit e4a54fe375

View File

@ -35,6 +35,7 @@ class PermissionEditPage extends React.Component {
permissionName: props.match.params.permissionName, permissionName: props.match.params.permissionName,
permission: null, permission: null,
organizations: [], organizations: [],
model: null,
users: [], users: [],
roles: [], roles: [],
models: [], models: [],
@ -59,6 +60,7 @@ class PermissionEditPage extends React.Component {
this.getRoles(permission.owner); this.getRoles(permission.owner);
this.getModels(permission.owner); this.getModels(permission.owner);
this.getResources(permission.owner); this.getResources(permission.owner);
this.getModel(permission.owner, permission.model);
}); });
} }
@ -98,6 +100,15 @@ class PermissionEditPage extends React.Component {
}); });
} }
getModel(organizationName, modelName) {
ModelBackend.getModel(organizationName, modelName)
.then((res) => {
this.setState({
model: res,
});
});
}
getResources(organizationName) { getResources(organizationName) {
ApplicationBackend.getApplicationsByOrganization("admin", organizationName) ApplicationBackend.getApplicationsByOrganization("admin", organizationName)
.then((res) => { .then((res) => {
@ -115,6 +126,10 @@ class PermissionEditPage extends React.Component {
} }
updatePermissionField(key, value) { updatePermissionField(key, value) {
if (key === "model") {
this.getModel(this.state.permission.owner, value);
}
value = this.parsePermissionField(key, value); value = this.parsePermissionField(key, value);
const permission = this.state.permission; const permission = this.state.permission;
@ -124,6 +139,13 @@ class PermissionEditPage extends React.Component {
}); });
} }
hasRoleDefinition(model) {
if (model !== null) {
return model.modelText.includes("role_definition");
}
return false;
}
renderPermission() { renderPermission() {
return ( return (
<Card size="small" title={ <Card size="small" title={
@ -214,7 +236,7 @@ class PermissionEditPage extends React.Component {
{Setting.getLabel(i18next.t("role:Sub roles"), i18next.t("role:Sub roles - Tooltip"))} : {Setting.getLabel(i18next.t("role:Sub roles"), i18next.t("role:Sub roles - Tooltip"))} :
</Col> </Col>
<Col span={22} > <Col span={22} >
<Select virtual={false} mode="tags" style={{width: "100%"}} value={this.state.permission.roles} onChange={(value => {this.updatePermissionField("roles", value);})}> <Select virtual={false} disabled={!this.hasRoleDefinition(this.state.model)} mode="tags" style={{width: "100%"}} value={this.state.permission.roles} onChange={(value => {this.updatePermissionField("roles", value);})}>
{ {
this.state.roles.filter(roles => (roles.owner !== this.state.roles.owner || roles.name !== this.state.roles.name)).map((permission, index) => <Option key={index} value={`${permission.owner}/${permission.name}`}>{`${permission.owner}/${permission.name}`}</Option>) this.state.roles.filter(roles => (roles.owner !== this.state.roles.owner || roles.name !== this.state.roles.name)).map((permission, index) => <Option key={index} value={`${permission.owner}/${permission.name}`}>{`${permission.owner}/${permission.name}`}</Option>)
} }