当前位置: 移动技术网 > IT编程>软件设计>架构 > AppBoxFuture(九): 组织结构与权限体系

AppBoxFuture(九): 组织结构与权限体系

2019年06月13日  | 移动技术网IT编程  | 我要评论

  权限体系是用于约束用户访问或操作资源的权利,这里的“资源”可以指数据,也可以指特定的功能(如审核订单)。通常的权限体系设计是基于角色的访问控制方式,用户通过角色与权限进行关联。作者的实现方式稍微有些不同,通过组织结构树与权限进行关联,这样可以实现子级节点继承上级节点设置的权限。

一、数据结构

  • 组织单元(orgunit):根据上级标识自引用的表结构,另通过entityref引用组织或工作组或员工;
  • 权限模型(permissionmodel):框架内置的元数据,包含已赋予权限的组织单元集合。

二、权限设置

  • 开发时根据业务需要,通过ide主菜单->new->permission新建权限模型,另可通过new->folder创建模型文件夹分门别类管理相关模型;
  • 运行时通过orgunits视图(暂简单实现,如下图所示)选择组织单元,然后在“权限设置”面板勾选相应的权限。

注意:请勿将admin用户的admin权限取消掉,未做判断会导致无权限。

三、权限验证

内部用户登录流程

  • 根据账号与密码查询员工并验证密码;
  • 查询员工映射的组织单元,形成组织单元路径(如:/公司/部门/员工);
  • 以组织单元路径新建并缓存会话信息。

注意:系统默认的admin密码:760wb,test密码:la581

服务内验证权限

  调用服务时,根据会话的组织单元路径与指定的权限比对,可判断当前用户是否具备特定的权限。

注意:目前未验证权限的服务所有人均可调用。

  • 服务方法attribute方式
[invokepermission(permissions.admin || permissions.developer)] //可组合
public async task<entitylist<entities.orgunit>> loadtreelist()
{
    var q = new tablescan<entities.orgunit>();
    return await q.totreelistasync(t => t.childs);
}
  • 服务方法内代码验证方式
public async task saveorder(entities.order order)
{
    if (!permissions.saveorder)
        throw new exception("不具备操作权限");
    await entitystore.saveasync(order);
}

四、本篇小结

  本篇主要介绍了框架集成的权限体系的实现方式,github上的运行时已经更新可测试。如果您有问题或bug报告,请留言或在github提交issue。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网