二进制方式是先将我们编写的程序进行编译变成机器可识别的指令代码(如。exe文件)然后再执行。这种编译好的程序我们只能执行、使用却看不到他的程序内容。
脚本简单地说就是一条条的文字命令具有良好的可阅读性。但它被解释一行然后由机器执行一行。
如果你理解了什么是脚本与脚本语言写脚本自然会懂就是用脚本语言写出来的脚本罢了。
咔咔目前所做的项目是一个saas系统在开发新功能之后需要为用户角色添加相应的权限这时整个系统的所有用户都需要添加相应的权限。
因为以前系统的缺陷现在只能用脚本来处理这些工作所以接下来咔咔将向你介绍如何编写安全可靠的PHP脚本以及如何事先设计好这个功能踩过一个坑直接把它埋起来
执行index。php文件php index。php kaka打印出来的数据与上面介绍的数组形式完全一样。第一个值是执行的文件名第二个参数就是携带给脚本的参数。
之前写了一篇laravel中给命令行携带参数不了解一下吗可以看看当时是rabbitmq路由模式遇到问题才知道的这个参数如今在写脚本就可以直接用了。
接受命令参数此参数用于防止脚本执行一半挂掉可以输入参数继续执行。
将查询出来的数据ID循环一次就赋值给while外层的ID防止脚本挂掉知道从哪条数据继续执行。
做一步检测操作判断此条数据是否已经存在将要给添加的权限。不存在时再进行添加操作。
最后一步也是最重要的一步将添加完成的主键ID返回到终端脚本挂掉直接用这个ID作为参数继续执行。
最后一步也是最重要的数据处理完成后需要返回一个标识知道此次脚本已经执行完成了。
update将(5,10)的数据加了间隙锁在没有释放锁的情况下这个范围的所有数据是无法添加的。
当然这种情况仅在无主键索引的情况下会产生因为主键索引的等值查询会退化为行锁。
每一家公司注册后默认有几个角色如超管、子管、财务、行政、人事等所有权限都绑定在相应的角色下使用单条记录方式。
既然需要添加一个CUI功能模块就需要添加此模块对应的权限默认情况下为所有租户相应的所有角色添加这个权限。
每一个租户对应角色的权限都存储在角色表中所有权限信息是在一个json串中存储并切维护了一个更新时间。
那么我们就以获取权限为切入点主系统单独维护一个权限表来看看这个过程是怎样的。
那么如何在这个设计上进行优化确保后期不再使用脚本进行刷数据而是让用户自主触发。
系统添加新功能需要设置权限时将权限名以json存储至系统表的auth_info中每次更新权限都添加一条数据。
用户登录后获取role表的更新时间去系统表中做判断将大于role时间的数据拿出来将查询出来的权限合并到role表中并更新这条记录的更新时间。
并将新增的权限维护至应用初始化中新注册的用户需将所有的权限给添加上这点根据自身系统看是否需要维护。
此方案虽然解决了每次添加新权限需要执行脚本但不可避免用户每次登录获取权限时都需要使用自身的权限时间跟系统权限时间做比对。
无形中会多进行一次查询这也是咔咔目前能想到的方案你要是有更好的方案可以探讨一下。
本文围绕实际业务进行讨论了脚本如何写、设计缺陷如何后期弥补在脚本中一定要使用正序防止新用户注册进来这点相信大家都清楚。
方案在我看来还不是最优的你要是有更好的思路可以在评论区扩展一下。
坚持学习、坚持写作、坚持分享是咔咔从业以来所秉持的信念。愿文章在偌大的互联网上能给你带来一点帮助我是咔咔下期见。
现在很方便就可以将 C# 作为某个脚本使用本文这里的脚本指的是直接执行源代码的方式。现在是 2020 现在的 C# 默认在 dotnet 的支持下可以作为脚本使用本文将告诉大家使用 C# 写脚本的优势和方法
基于 dotnet 的 C# 有整个 dotnet 的基础库和通过 NuGet 带来的海量的第三方库有超级多的功能都有大佬实现过。使用 C# 写脚本可以通过大量的库快速完成任务站在巨人的肩膀上也是一种进步
日常咱开发用的是 C# 如果此时采用其他的语言如 bat 或 py 等虽然这部分脚本也很优秀但是架不住咱不是天天维护每次去写总是发现熟练度不够。而熟练度不够带来的问题就是对里面一些细节的坑不够了解或者了解但是写的时候忘了。此时的脚本的可维护性以及稳定性都不是很好。当然脚本本身就不看重以上两点。最重要的应该就是写的时候的效率了千万不要和我吹 py 的编写效率比 C# 高哈这完全取决于熟悉程度哦。千万记住前提是咱不是天天写脚本的
调试方便支持复杂的逻辑。虽然其他的语言如 PowerShell 等都有调试工具但是一个新的调试工具上手起来也是有成本的。而采用 C# 可以让咱用上太阳系最强的 VisualStudio 工具辅助调试调试手段特别多。在支持了调试之后就可以放心开启复杂逻辑模式当成业务代码一样来写。在说到调试方便的时候就不得不说到最难调试的 bat 脚本了这部分脚本的中间变量完全需要靠输出
一句话就可以执行脚本了执行方法就是进入到脚本所在的文件夹通过dotnet run命令就可以自动构建然后运行构建的应用也就是本质上还是执行一个 exe 文件但是咱可以作为脚本用源代码的形式分发
我比较推荐在 VS 上创建在 VS 里面新建一个 dotnet core 控制台应用就可以了。创建完成编写脚本调试完成发布。发布的时候是发布整个代码文件夹核心只是包含一个 csproj 项目文件和用到的 cs 脚本代码文件
请将上面的 Foo 替换为你创建的脚本名此时使用中文名也是可以的大佬不要喷我当然用中文名的时候有些 Linux 系统对此支持不是特别好
此时可以尝试在 Program。cs 文件里面的 Main 方法添加一些逻辑如更改输出内容等。在 C# 脚本里面在运行的时候都是从 Main 方法开始的也就是入口代码应该放在这个函数里面
在进入到脚本所在文件夹的时候就可以通过dotnet run这一句命令执行起来了
使用 dotnet run 的命令是全平台的哦也就是在 Linux 服务器上和在 Windows 设备上都是相同的这一句命令就能运行起来脚本。只需要在脚本里面没有写平台相关的代码就可以全平台运行的
作为脚本的时候其实小伙伴可以注意到上面代码是需要通过cd命令进入到某个文件夹的此时会干扰当前工作路径。而 dotnet run 命令提供了参数可以让咱指定运行的是哪个文件夹的脚本
指定运行 Foo 文件夹里面的脚本下面代码将会尝试执行 Foo 文件夹里面的脚本但是前提是 Foo 文件夹里面仅有一个 csproj 项目文件同时项目里面的代码是能构建通过的
而如果需要给运行的脚本传入参数需要添加--字符在--后面的命令就是传给脚本的参数如下面代码
上面代码的123将会传入到脚本里面可以在脚本的 Main 方法的参数拿到传入的命令
我搭建了自己的博客欢迎大家访问里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园但是一旦发布了就不再更新
如果在博客看到有任何不懂的欢迎交流我搭建了dotnet 职业技术学院欢迎大家加入
【小编推荐】增幅资源这么多小号