世界上最伟大的投资就是投资自己的教育
全场限时 5 折
所有回复
2020-02-15
-
你好,我知有 API 可以测试,但是我是想结合我自己的 API 来做,我后端用的是 NET CORE 的 ABP 框架的,里面有这个限制,所以我想问一下。
11:37 -
对 afr751116 · 大乘 回复
想请问一下:我的后端是限制了哪些网址跟端口才可以访问的,这个 Insomnia 它调用 API 时使用的 IP 跟端口是多少?在哪里看?
你接着后面看下去 这两集先别急着尝试 后面有 api 给你用的
11:27 -
想请问一下:我的后端是限制了哪些网址跟端口才可以访问的,这个 Insomnia 它调用 API 时使用的 IP 跟端口是多少?在哪里看?
11:23
2020-02-14
-
22:25
-
应该不是图片验证码的问题,是手机验证码的问题。注册流程走不通。
22:16 -
22:14
-
22:04
-
对 吕小荣 · 元婴 回复
还有,微信登陆后,如何给账户绑定 email,设置密码?
我刚才试了下 github 可以登录呀,不少人也是这种方式,可能要科学上网吧
三种方式都是分开的用户,所以就不存在绑定之说了,不过微信或 github 登录的可以由后台改成密码用户名来登录
22:01 -
21:57
-
对 吕小荣 · 元婴 回复
给一个反馈:
- 你的网站通过邮箱无法注册,因为短信收到的验证码永远通不过验证。
- github 的回掉似乎也走不通。
现在这个网站,除了用微信登陆,没有其他办法。
多谢你的反馈,1 通过邮箱可以注册吧,因为我的后台会随时监控新注册的用户,有发现通过手机或邮箱注册进来的,我再去看下吧
21:56 -
还有,微信登陆后,如何给账户绑定 email,设置密码?
21:53 -
给一个反馈:
- 你的网站通过邮箱无法注册,因为短信收到的验证码永远通不过验证。
- github 的回掉似乎也走不通。
现在这个网站,除了用微信登陆,没有其他办法。
21:53 -
感觉 dva 的文档写的不全,需要看源码才能知道怎么用。这是国内库的通病吗?
国外的 js 库也是这样子吗?
21:51
2020-02-13
-
对 陈太太先生 · 合体 回复
么有我想要了解的 splitChunks 相关的。 :)
18:35
2020-02-12
2020-02-11
2020-02-10
-
对 随风 · 练气 回复
感谢 :)
14:21 -
经过测试,在有 token 的情况下,第一次登录的时候仍然留在登录页面,第二次登录的时候在可以
第一次登录的时候 currentUser 没有获取到,分析原因可能是这个 currentUser 在获取用户在 token 存储之前就请求了 currentUser,第二次登录的时候使用的是第一次的 token 去获取的 currentUser,所以第二次能登录上12:03 -
对 陈太太先生 · 合体 回复
随风大哥,想咨询一下,:),就是你录屏的时候,默认屏幕是放大了的,随着你输入超出屏幕的时候,屏幕会缩小一下,是软件实现的还是 mac 自带的呢,我用 macOS 好几年了,只知道放大镜一样的功能,但是没有一个像你这个效果那么舒服的。可以告知一下不呢
这个录制加编辑的软件实现的
11:08 -
随风大哥,想咨询一下,:),就是你录屏的时候,默认屏幕是放大了的,随着你输入超出屏幕的时候,屏幕会缩小一下,是软件实现的还是 mac 自带的呢,我用 macOS 好几年了,只知道放大镜一样的功能,但是没有一个像你这个效果那么舒服的。可以告知一下不呢
08:59
2020-02-09
-
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 }, }); }, },
13:59 -
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 给的方案,
13:56
© 汕尾市求知科技有限公司 | Rails365 Gitlab | Qiuzhi99 Gitlab | 知乎 | b 站 | 搜索
粤公网安备 44152102000088号 | 粤ICP备19038915号
Top