脚手架白小僧的furion,orm sqlsugar
与其说magic.net的多租户应用不如说是sqlsugar 对多租户 多数据库对象的自由切换贡献了很大的力量
当然 多租户架构,数据库表的设计,租户管理,权限相关的思想,应该出自admin.net ,但是admin.net 是ef版本的.
总体来看 magic跟admin.net 数据库一样的,orm是不同的,把ef 翻译到sqlsugar版本
经过几天的入手,强烈的建议使用sqlsugar ,对框架的支持,写法都很方便.
关于权限
设置完角色后, 分配角色目录授权, 然后给用户授权角色,那此用户便有了此角色分配的目录的权限
关于租户
租户相当于系统管理员角色,可以为租户用户授权菜单,登录时则显示授权的菜单,这样有效的显示该显示部分.
关于多租户saas.
可以采用业务部分数据库独立,比如一个租户独自有自己的业务数据库. 在路由请求业务时根据租户id 切换到数据库对象即可,这个sqlsugar均提供了功能
开启软件,加载数据库列表,此列表是从主数据库的租赁用户表配置中获得,以租户id为configid,在切换时 ,可以通过changedb命令.数据库操作,或者获取数据对象通过id 就不用来回切换了,获取了id用完了自动回到了主数据库对象,在后台就转换了
关于实体类生成
sqlsugar还提供了WebFirst.exe 很方便的把数据库的表生成实体类.
maigic后台也能生成代码,可以自动的生成路由到路由表内.很方便. 前提是先在项目用加入要生成代码的实体类.
关于开发流程
我是数据库表先设计好了,再生成实体 ,实体内要继承base那个类,实体内要去掉base公用的部分
然后就是input 请求时的实体类, long ? int? 的要对应好,免得提交时不加参数再转换时 int成了0 数据库会修改了数据,实体类中要加上这个问号,这样再实体类转换的时候,才不会没传参值是null.
关于token 验证部分
结合了微软的权限部分,token在背后就给验证了,验证完之后的权限是通过路由请求获得.验证完token之后会对请求的上下文的获取后做权限判断,
如果此用户的权限表内没有当前的请求路由则返回错误. 此处是区分大小写的.路由大小写对应路由表的大小写要统一,或者在获取路由的时候给大小写转换.不改的话也挺好,自己开发人员知道这个规格,也能因拼写问题阻拦一部分未知请求者 ,
/// 检查权限 /// </summary> /// <param name="httpContext"></param> /// <returns></returns> private static async Task<bool> CheckAuthorzieAsync(DefaultHttpContext httpContext) { // 管理员跳过判断 if (UserManager.IsSuperAdmin) return true; // 路由名称 var routeName = httpContext.Request.Path.Value.Substring(1).Replace("/", ":"); //var allPermission = await App.GetService<ISysMenuService>().GetAllPermission(); //此处感觉是非路由表数据放行.暂时注释掉. /*if (!allPermission.Contains(routeName)) { return true; }*/ //// 默认路由(获取登录用户信息) //var defalutRoute = new List<string>() //{ // "getLoginUser", // "sysNotice:unread", // "codeGenerate:InformationList", // "sysFileInfo:uploadAvatar", // "sysFileInfo:preview" //}; //if (defalutRoute.Contains(routeName)) return true; // 获取用户权限集合(按钮或API接口) var permissionList = await App.GetService<ISysMenuService>().GetLoginPermissionList(UserManager.UserId); // 检查授权 return permissionList.Contains(routeName); }
关于测试api
用swagger 页面api 测试挺好.
swagger 能自动把 input 类的参数给放入请求参数中,input类内可以规定参数是否必须等等.


第一步先在验证部分请求登录,登录后swagger 页面会自动把token值 加入到页面内

后台配置内把token 的过期时间设置的长点,这样用的长久一点.
token 是能解开的.只是秘钥在服务器存着.
请求的时候, 点try it out 就可以了.

如果需要留言后续再加开发中注意细节.
浙公网安备 33010602011771号