世界上最伟大的投资就是投资自己的教育

陈太太先生


id 15359


陈太太先生 1 days 3 hours 3 minutes 47 seconds 舵主 研究生 移动端用户


  • 轻松学 Webpack 4 免费视频教程 #36 打包优化 - 生产环境压缩 CSS 文件

    么有我想要了解的 splitChunks 相关的。 :)

  • 诱人的 React 免费视频教程 - 基础篇 #3 第一个组件

    Vim 默认不是这样的?没有用过,那是大神用的,哈哈

  • 基于角色的权限控制原理与实战 #14 权限管理 - 新增权限 - 添加权限 - 删除权限(今天第四更)

    随风大哥,想咨询一下,:),就是你录屏的时候,默认屏幕是放大了的,随着你输入超出屏幕的时候,屏幕会缩小一下,是软件实现的还是 mac 自带的呢,我用 macOS 好几年了,只知道放大镜一样的功能,但是没有一个像你这个效果那么舒服的。可以告知一下不呢

  • Ant Design Pro v4 基于角色的权限访问控制实战教程 #17 要升级到 ant design@4 吗?

    menu.js 这边也有一个逻辑

      effects: {
        *getMenuData({ payload }, { put, select }) {
          const { routes, authority } = payload;
    
          const menuData = filterMenuData(memoizeOneFormatter(routes, authority));
    
          // console.info(JSON.stringify(menuData,null,'\t'));
          /** 获取系统权限列表 */
          yield put.resolve({
            type: 'sysUser/sysUserPolicy',
          });
          const policyList = yield select(state => state.sysUser.policy);
          /**
           * {
                "permCode": "sys_module",
                "actions": [
                  {
                    "text": "输入",
                    "value": 1,
                    "key": "ADD"
                  }
                ],
                "permValue": 1
              },
           */
          const policy = new Policy();
          policy.initPolicy(policyList);
    
          // // 过滤没权限的菜单
          // menuData.map((item, index) => {
          //   if (typeof item.children !== 'undefined') {
          //     let len = 0;
          //     item.children.map((sub, i) => {
          //       if (typeof sub.policy !== 'undefined' && policy.viewVerify(sub.policy) !== true) {
          //         menuData[index].children[i].hideInMenu = true;
          //       } else {
          //         len++;
          //       }
          //       return sub;
          //     });
          //     // 如果子菜单全部隐藏了,那么主菜单也隐藏
          //     if (len === 0) {
          //       menuData[index].hideInMenu = true;
          //     }
          //   }
          //   return item;
          // });
          const breadcrumbNameMap = memoizeOneGetBreadcrumbNameMap(menuData);
          yield put({
            type: 'save',
            payload: { menuData, breadcrumbNameMap, routerData: routes },
          });
        },
      },
    
  • Ant Design Pro v4 基于角色的权限访问控制实战教程 #17 要升级到 ant design@4 吗?
    import RenderAuthorized from 'ant-design-pro/lib/Authorized';
    import { Alert } from 'antd';
    
    const Authorized = RenderAuthorized('user');
    const noMatch = <Alert message="No permission." type="error" showIcon />;
    
    const havePermission = () => {
      return false;
    };
    
    // 主要是这里 
    ReactDOM.render(
      <Authorized authority={havePermission} noMatch={noMatch}>
        <Alert
          message="Use Function as a parameter passed!"
          type="success"
          showIcon
        />
      </Authorized>,
      mountNode,
    );
    
    
    import CheckPermissions from './CheckPermissions';
    
    const Authorized = ({ children, authority, noMatch = null }) => {
      const childrenRender = typeof children === 'undefined' ? null : children;
      return CheckPermissions(authority, childrenRender, noMatch);
    };
    
    export default Authorized;
    
    
    
    import React from 'react';
    import PromiseRender from './PromiseRender';
    import Policy from '@/utils/policy';
    
    import { CURRENT } from './renderAuthorize';
    import { devPerm } from '@/utils/authority';
    
    function isPromise(obj) {
      return (
        !!obj &&
        (typeof obj === 'object' || typeof obj === 'function') &&
        typeof obj.then === 'function'
      );
    }
    
    /**
     * 通用权限检查方法
     * Common check permissions method
     * @param { 权限判定 Permission judgment type string |array | Promise | Function } authority  sys_module/VIE
     * @param { 你的权限 Your permission description  type:string} currentAuthority 系统localStorage中policy值,每次请求菜单都会更新
     * @param { 通过的组件 Passing components } target
     * @param { 未通过的组件 no pass components } Exception
     */
    const checkPermissions = (authority, currentPolicy, target, Exception) => {
      // 没有判定权限.默认查看所有
      // Retirement authority, return target;
      if (authority === undefined || (devPerm())) {
        return target;
      }
      const policyInstance = new Policy();
      policyInstance.initPolicy(currentPolicy);
      // 数组处理
      if (Array.isArray(authority)) {
        if (authority.some(item => policyInstance.verify(item))) {
          return target;
        }
        return Exception;
      }
    
      // string 处理
      if (typeof authority === 'string') {
        if (policyInstance.verify(authority)) {
          return target;
        }
        return Exception;
      }
    
      // Promise 处理
      if (isPromise(authority)) {
        return <PromiseRender ok={target} error={Exception} promise={authority} />;
      }
    
      // Function 处理
      if (typeof authority === 'function') {
        try {
          const bool = authority(currentPolicy);
          // 函数执行后返回值是 Promise
          if (isPromise(bool)) {
            return <PromiseRender ok={target} error={Exception} promise={bool} />;
          }
          if (bool) {
            return target;
          }
          return Exception;
        } catch (error) {
          throw error;
        }
      }
      throw new Error('unsupported parameters');
    };
    
    export { checkPermissions };
    
    const check = (authority, target, Exception) => checkPermissions(authority, CURRENT, target, Exception);
    
    export default check;
    
    
    

    这个部分代码,思路已经在里面了。其实就是构造一个权限数,可以在服务器拿,也可以在本地弄一个简单的。然后每个授权组件都要用 HOC 包裹一下就可以了。HOC 中做权限检验逻辑做对应的处理就好,这个是以前 Antd 给的方案,

  • Ant Design Pro v4 基于角色的权限访问控制实战教程

    我记得 AntdPro 以前是有例子的,就是一个高阶就可以做到了啊。要显示按钮的地方,你高阶包含一下就可以了啊

  • Ant Design Pro v4 基于角色的权限访问控制实战教程 #17 要升级到 ant design@4 吗?

    我的做法是服务端给授权树,然后在 menu 那边做过滤就应该可以了,然后还有一个 Authrized 的 HOC

  • 朋友圈

    对丫,对丫 :)

© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top