feat: save policy in adapter edit page (#2190)

* fix: save policy in adapter

* fix: disable edit for builtin adapter
This commit is contained in:
Yaodong Yu 2023-08-09 00:12:53 +08:00 committed by GitHub
parent bb937c30c1
commit 558bcf95d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 4 deletions

View File

@ -269,6 +269,11 @@ func UpdatePolicy(oldPolicy, newPolicy []string, adapter *Adapter) (bool, error)
if err != nil { if err != nil {
return affected, err return affected, err
} }
err = adapter.SavePolicy(casbinModel)
if err != nil {
return false, err
}
return affected, nil return affected, nil
} }
@ -285,6 +290,10 @@ func AddPolicy(policy []string, adapter *Adapter) (bool, error) {
} }
casbinModel.AddPolicy("p", "p", policy) casbinModel.AddPolicy("p", "p", policy)
err = adapter.SavePolicy(casbinModel)
if err != nil {
return false, err
}
return true, nil return true, nil
} }
@ -305,6 +314,11 @@ func RemovePolicy(policy []string, adapter *Adapter) (bool, error) {
if err != nil { if err != nil {
return affected, err return affected, err
} }
err = adapter.SavePolicy(casbinModel)
if err != nil {
return false, err
}
return affected, nil return affected, nil
} }

View File

@ -25,5 +25,12 @@ func CasbinToSlice(casbinRule xormadapter.CasbinRule) []string {
casbinRule.V4, casbinRule.V4,
casbinRule.V5, casbinRule.V5,
} }
// remove empty strings from end, for update model policy map
for i := len(s) - 1; i >= 0; i-- {
if s[i] != "" {
s = s[:i+1]
break
}
}
return s return s
} }

View File

@ -287,10 +287,10 @@ class PolicyTable extends React.Component {
) : ( ) : (
<div> <div>
<Tooltip placement="topLeft" title="Edit"> <Tooltip placement="topLeft" title="Edit">
<Button disabled={this.state.editingIndex !== ""} style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={() => this.edit(record, index)} /> <Button disabled={this.state.editingIndex !== "" || Setting.builtInObject({owner: this.props.owner, name: this.props.name})} style={{marginRight: "5px"}} icon={<EditOutlined />} size="small" onClick={() => this.edit(record, index)} />
</Tooltip> </Tooltip>
<Tooltip placement="topLeft" title="Delete"> <Tooltip placement="topLeft" title="Delete">
<Button disabled={this.state.editingIndex !== ""} style={{marginRight: "5px"}} icon={<DeleteOutlined />} size="small" onClick={() => this.deletePolicy(table, index)} /> <Button disabled={this.state.editingIndex !== "" || Setting.builtInObject({owner: this.props.owner, name: this.props.name})} style={{marginRight: "5px"}} icon={<DeleteOutlined />} size="small" onClick={() => this.deletePolicy(table, index)} />
</Tooltip> </Tooltip>
</div> </div>
); );
@ -304,14 +304,14 @@ class PolicyTable extends React.Component {
onChange: (page) => this.setState({ onChange: (page) => this.setState({
page: page, page: page,
}), }),
disabled: this.state.editingIndex !== "", disabled: this.state.editingIndex !== "" || Setting.builtInObject({owner: this.props.owner, name: this.props.name}),
current: this.state.page, current: this.state.page,
}} }}
columns={columns} dataSource={table} rowKey="key" size="middle" bordered columns={columns} dataSource={table} rowKey="key" size="middle" bordered
loading={this.state.loading} loading={this.state.loading}
title={() => ( title={() => (
<div> <div>
<Button disabled={this.state.editingIndex !== ""} style={{marginRight: "5px"}} type="primary" size="small" onClick={() => this.addRow(table)}>{i18next.t("general:Add")}</Button> <Button disabled={this.state.editingIndex !== "" || Setting.builtInObject({owner: this.props.owner, name: this.props.name})} style={{marginRight: "5px"}} type="primary" size="small" onClick={() => this.addRow(table)}>{i18next.t("general:Add")}</Button>
</div> </div>
)} )}
/> />