2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-05-01 06:56:50 +00:00

Hide actions if user does not have correct permissions

This commit is contained in:
Oliver Walters 2021-02-27 22:27:18 +11:00
parent 04f03188e2
commit 096c4e86dc
4 changed files with 74 additions and 36 deletions

View File

@ -62,7 +62,7 @@ class _CategoryDisplayState extends RefreshableState<CategoryDisplayWidget> {
)
);
if (category != null) {
if ((category != null) && InvenTreeAPI().checkPermission('part_category', 'change')) {
actions.add(
IconButton(
icon: FaIcon(FontAwesomeIcons.edit),

View File

@ -62,7 +62,7 @@ class _LocationDisplayState extends RefreshableState<LocationDisplayWidget> {
),
);
if (location != null) {
if ((location != null) && (InvenTreeAPI().checkPermission('stock_location', 'change'))) {
actions.add(
IconButton(
icon: FaIcon(FontAwesomeIcons.edit),
@ -320,22 +320,29 @@ List<Widget> detailTiles() {
tiles.add(locationDescriptionCard());
// Scan items into location
tiles.add(
ListTile(
title: Text(I18N.of(context).barcodeScanInItems),
leading: FaIcon(FontAwesomeIcons.exchangeAlt),
trailing: FaIcon(FontAwesomeIcons.qrcode),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => InvenTreeQRView(StockLocationScanInItemsHandler(location)))
).then((context) {
refresh();
});
},
)
);
// Stock adjustment actions
if (InvenTreeAPI().checkPermission('stock', 'change')) {
// Scan items into location
tiles.add(
ListTile(
title: Text(I18N
.of(context)
.barcodeScanInItems),
leading: FaIcon(FontAwesomeIcons.exchangeAlt),
trailing: FaIcon(FontAwesomeIcons.qrcode),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) =>
InvenTreeQRView(
StockLocationScanInItemsHandler(location)))
).then((context) {
refresh();
});
},
)
);
}
// Move location into another location
// TODO: Implement this!

View File

@ -41,18 +41,29 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
@override
List<Widget> getAppBarActions(BuildContext context) {
return <Widget>[
IconButton(
icon: FaIcon(FontAwesomeIcons.globe),
onPressed: _openInvenTreePage,
),
// TODO: Hide the 'edit' button if the user does not have permission!!
IconButton(
icon: FaIcon(FontAwesomeIcons.edit),
tooltip: I18N.of(context).edit,
onPressed: _editPartDialog,
)
];
List<Widget> actions = [];
if (InvenTreeAPI().checkPermission('part', 'view')) {
actions.add(
IconButton(
icon: FaIcon(FontAwesomeIcons.globe),
onPressed: _openInvenTreePage,
),
);
}
if (InvenTreeAPI().checkPermission('part', 'change')) {
actions.add(
IconButton(
icon: FaIcon(FontAwesomeIcons.edit),
tooltip: I18N.of(context).edit,
onPressed: _editPartDialog,
)
);
}
return actions;
}
_PartDisplayState(this.part) {
@ -82,8 +93,11 @@ class _PartDisplayState extends RefreshableState<PartDetailWidget> {
}
void _toggleStar() async {
await part.update(context, values: {"starred": "${!part.starred}"});
refresh();
if (InvenTreeAPI().checkPermission('part', 'change')) {
await part.update(context, values: {"starred": "${!part.starred}"});
refresh();
}
}
void _savePart(Map<String, String> values) async {

View File

@ -140,10 +140,9 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
void _stockUpdateMessage(bool result) {
showSnackIcon(
result ? "Stock item updated" : "Stock item updated failed",
success: result
);
if (result) {
showSnackIcon("Stock item updated", success: true);
}
}
void _removeStock() async {
@ -514,6 +513,24 @@ class _StockItemDisplayState extends RefreshableState<StockDetailWidget> {
tiles.add(headerTile());
// First check that the user has the required permissions to adjust stock
if (!InvenTreeAPI().checkPermission('stock', 'change')) {
tiles.add(
ListTile(
title: Text("Permission Required"),
leading: FaIcon(FontAwesomeIcons.userTimes)
)
);
tiles.add(
ListTile(
subtitle: Text("Your account does not have permission to perform stock adjustments"),
)
);
return tiles;
}
if (!item.isSerialized()) {
tiles.add(
ListTile(