feat: router permission
This commit is contained in:
parent
11df20c98e
commit
9527dcaee2
|
@ -4,6 +4,6 @@ export 'data.dart';
|
|||
export 'enum.dart';
|
||||
export 'global_url.dart';
|
||||
export 'cache_key.dart';
|
||||
export 'router.dart';
|
||||
export '../router/router.dart';
|
||||
export 'text_enum.dart';
|
||||
export 'system_param_config.dart';
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sk_base_mobile/store/resource.store.dart';
|
||||
import 'package:sk_base_mobile/util/util.dart';
|
||||
|
||||
class AuthMiddleware extends GetMiddleware {
|
||||
@override
|
||||
RouteSettings? redirect(String? route) {
|
||||
bool isExsited = ResourceService.to.resources
|
||||
.firstWhereOrNull((element) => element.path == route) !=
|
||||
null;
|
||||
|
||||
if (!isExsited) {
|
||||
SnackBarUtil().info('您没有权限');
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
import 'package:get/get.dart';
|
||||
import 'package:sk_base_mobile/models/user_info.model.dart';
|
||||
import 'package:sk_base_mobile/router/auth_middleware.dart';
|
||||
import 'package:sk_base_mobile/screens/hr_manage/components/employee_detail.dart';
|
||||
import 'package:sk_base_mobile/screens/hr_manage/hr_manage.dart';
|
||||
import 'package:sk_base_mobile/screens/inventory/inventory.dart';
|
||||
|
@ -13,18 +14,45 @@ class RouteConfig {
|
|||
static const String home = "/";
|
||||
static const String login = '/login';
|
||||
static const String userinfo = '/userinfo';
|
||||
static const String inventory = '/inventory';
|
||||
static const String inventory = '/workbench/inventory';
|
||||
static const String saleQuotation = '/workbench/sale_quotation';
|
||||
static const String hrManage = '/workbench/hr_manage';
|
||||
static const String employeeDetail = '/employee_detail';
|
||||
|
||||
static final List<GetPage> getPages = [
|
||||
GetPage(name: login, page: () => LoginScreen()),
|
||||
GetPage(
|
||||
name: login,
|
||||
page: () => LoginScreen(),
|
||||
),
|
||||
GetPage(name: home, page: () => LandingPage()),
|
||||
GetPage(name: userinfo, page: () => UserInfoPage()),
|
||||
GetPage(name: inventory, page: () => const InventoryPage()),
|
||||
GetPage(name: saleQuotation, page: () => SaleQuotationPage()),
|
||||
GetPage(name: hrManage, page: () => HrManagePage()),
|
||||
GetPage(name: employeeDetail, page: () => EmployeeDetail())
|
||||
GetPage(
|
||||
name: inventory,
|
||||
page: () => const InventoryPage(),
|
||||
middlewares: [
|
||||
// AuthMiddleware(), // 使用拦截器
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: saleQuotation,
|
||||
page: () => SaleQuotationPage(),
|
||||
middlewares: [
|
||||
// AuthMiddleware(), // 使用拦截器
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: hrManage,
|
||||
page: () => HrManagePage(),
|
||||
middlewares: [
|
||||
// AuthMiddleware(), // 使用拦截器
|
||||
],
|
||||
),
|
||||
GetPage(
|
||||
name: employeeDetail,
|
||||
page: () => EmployeeDetail(),
|
||||
middlewares: [
|
||||
// AuthMiddleware(), // 使用拦截器
|
||||
],
|
||||
)
|
||||
];
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sk_base_mobile/store/resource.store.dart';
|
||||
import 'package:sk_base_mobile/util/snack_bar.util.dart';
|
||||
|
||||
class RouterUtil {
|
||||
static Future<T?> toNamed<T>(String routeName, {arguments}) async {
|
||||
//关闭键盘
|
||||
if (Get.context != null) {
|
||||
FocusScope.of(Get.context!).requestFocus(FocusNode());
|
||||
}
|
||||
bool isExsited = ResourceService.to.resources
|
||||
.firstWhereOrNull((element) => element.path == routeName) !=
|
||||
null;
|
||||
|
||||
if (!isExsited) {
|
||||
SnackBarUtil().info('您没有权限,请联系管理员分配权限,后期将隐藏无权限的菜单');
|
||||
return null;
|
||||
}
|
||||
|
||||
return await Get.toNamed<T?>(routeName, arguments: arguments);
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@ import 'package:sk_base_mobile/util/debouncer.dart';
|
|||
import 'package:sk_base_mobile/util/device.util.dart';
|
||||
import 'package:sk_base_mobile/util/media_util.dart';
|
||||
import 'package:sk_base_mobile/util/modal.util.dart';
|
||||
import 'package:sk_base_mobile/util/router.util.dart';
|
||||
import 'package:sk_base_mobile/router/router.util.dart';
|
||||
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
|
||||
import 'package:sk_base_mobile/util/snack_bar.util.dart';
|
||||
import 'package:sk_base_mobile/widgets/core/sk_avatar.dart';
|
||||
|
|
|
@ -4,8 +4,9 @@ import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
|||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:sk_base_mobile/app_theme.dart';
|
||||
import 'package:sk_base_mobile/constants/router.dart';
|
||||
import 'package:sk_base_mobile/router/router.dart';
|
||||
import 'package:sk_base_mobile/screens/workbench/workbench_controller.dart';
|
||||
import 'package:sk_base_mobile/router/router.util.dart';
|
||||
import 'package:sk_base_mobile/util/screen_adaper_util.dart';
|
||||
import 'package:sk_base_mobile/util/snack_bar.util.dart';
|
||||
import 'package:sk_base_mobile/widgets/core/sk_appbar.dart';
|
||||
|
@ -42,9 +43,9 @@ class WorkBenchPage extends StatelessWidget {
|
|||
.map((e) => e.name)
|
||||
.firstWhereOrNull((name) => name == controller.menus[index].route);
|
||||
if (route != null) {
|
||||
Get.toNamed(controller.menus[index].route);
|
||||
RouterUtil.toNamed(controller.menus[index].route);
|
||||
} else {
|
||||
SnackBarUtil().info('功能待开发。');
|
||||
SnackBarUtil().info('您没有权限,请联系管理员。后期会隐藏没有权限的功能');
|
||||
}
|
||||
},
|
||||
child: Container(
|
||||
|
|
|
@ -4,7 +4,8 @@ import 'package:sk_base_mobile/models/workbench.model.dart';
|
|||
|
||||
class WorkBenchController extends GetxController {
|
||||
final List<WorkBenchModel> menus = [
|
||||
WorkBenchModel(title: '库存', route: '/inventory', icon: 'inventory.svg'),
|
||||
WorkBenchModel(
|
||||
title: '库存', route: RouteConfig.inventory, icon: 'inventory.svg'),
|
||||
WorkBenchModel(title: '产品', route: '/product', icon: 'product.svg'),
|
||||
WorkBenchModel(title: '合同', route: '/contract', icon: 'contract.svg'),
|
||||
WorkBenchModel(title: '人事', route: RouteConfig.hrManage, icon: 'hr.svg'),
|
||||
|
|
|
@ -17,9 +17,15 @@ class ResourceService extends GetxService {
|
|||
Future<void> getResources() async {
|
||||
try {
|
||||
final response = await Api.getResources();
|
||||
resources.value = (response.data as List)
|
||||
final appResources = (response.data as List)
|
||||
.map((item) => ResourceModel.fromJson(item))
|
||||
.toList();
|
||||
.toList()
|
||||
.firstWhereOrNull(
|
||||
(element) => element.name == 'App',
|
||||
);
|
||||
if (appResources != null) {
|
||||
resources.assignAll(appResources.children);
|
||||
}
|
||||
} catch (e) {
|
||||
LoggerUtil().error('getResources error: $e');
|
||||
}
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class RouterUtil {
|
||||
static Future<T?> toNamed<T>(String routeName, {arguments}) async {
|
||||
//关闭键盘
|
||||
if (Get.context != null) {
|
||||
FocusScope.of(Get.context!).requestFocus(FocusNode());
|
||||
}
|
||||
return await Get.toNamed<T?>(routeName, arguments: arguments);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue