zoukankan      html  css  js  c++  java
  • AppBoxFuture(九): 组织结构与权限体系

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

    一、数据结构

    • 组织单元(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。

  • 相关阅读:
    iOS-汽车品牌app
    iOS-英雄联盟人物展示
    工作与梦想中的工作:给计算机专业学生的建议
    c++ 宏的使用
    c++ 预处理的应用
    iOS-UItableView 多组表格
    ios-代理模式 协议小结
    c++有符号变量和无符号变量相加的结果
    ios-图片轮播器
    ios-倒计时
  • 原文地址:https://www.cnblogs.com/BaiCai/p/11007400.html
Copyright © 2011-2022 走看看