1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import React from 'react';
- import Exception from '../Exception/index';
- import CheckPermissions from './CheckPermissions';
- /**
- * 默认不能访问任何页面
- * default is "NULL"
- */
- const Exception403 = () => <Exception type="403" style={{ minHeight: 500, height: '80%' }} />;
-
- // Determine whether the incoming component has been instantiated
- // AuthorizedRoute is already instantiated
- // Authorized render is already instantiated, children is no instantiated
- // Secured is not instantiated
- const checkIsInstantiation = target => {
- if (!React.isValidElement(target)) {
- return target;
- }
- return () => target;
- };
-
- /**
- * 用于判断是否拥有权限访问此view权限
- * authority 支持传入 string ,funtion:()=>boolean|Promise
- * e.g. 'user' 只有user用户能访问
- * e.g. 'user,admin' user和 admin 都能访问
- * e.g. ()=>boolean 返回true能访问,返回false不能访问
- * e.g. Promise then 能访问 catch不能访问
- * e.g. authority support incoming string, funtion: () => boolean | Promise
- * e.g. 'user' only user user can access
- * e.g. 'user, admin' user and admin can access
- * e.g. () => boolean true to be able to visit, return false can not be accessed
- * e.g. Promise then can not access the visit to catch
- * @param {string | function | Promise} authority
- * @param {ReactNode} error 非必需参数
- */
- const authorize = (authority, error) => {
- /**
- * conversion into a class
- * 防止传入字符串时找不到staticContext造成报错
- * String parameters can cause staticContext not found error
- */
- let classError = false;
- if (error) {
- classError = () => error;
- }
- if (!authority) {
- throw new Error('authority is required');
- }
- return function decideAuthority(targer) {
- const component = CheckPermissions(authority, targer, classError || Exception403);
- return checkIsInstantiation(component);
- };
- };
-
- export default authorize;
|