美文网首页
权限管理模型

权限管理模型

作者: supremecsp | 来源:发表于2022-07-06 18:24 被阅读0次

今天学习了一个比较有趣的权限模型。
比如用户在一个系统中有不同的权限,这些权限称为一个权限组:
1、管理员权限: 管理员,拥有系统所有权限。
2、普通权限:一般用于普通成员,只拥有家庭数据查看,设备、场景控制,接收通知等普通权限。
3、高级权限:针对特殊用户设置的权限角色, 除拥有普通权限外, 还拥有有限的功能管理权限。

不同的权限有不同的功能点
按照业务模块分类划分功能权限,同时考虑c端交互特点,已功能有限性(预估每模块小于30个),可采用二进制位定义权限点取值, 那么用户拥有的某个模块权限为在该模块下拥有的各权限点取值之和。
模块内权限点序号从1开始递增, 那么可按照公式:

权限点取值 = 2^(权限点序号-1)


示例

设计缘由
权限值是这样的
2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)
2^1=2,相应2进数为”0010″
2^2=4,相应2进数为”0100″
2^3=8,相应2进数为”1000″

要判断一个数在某些数范围内就可以使用 & 运算符(数值从上面的表中得来)
如:7=4|2|1 (由于是2的倍数,你也可以简单理解成7=4+2+1)
用 & 来操作,可以知道7&4、7&2、7&1都是真的,而如果7&8则是假的

/**
     * 权限值计算
     */
    public long getPrivilegeValue() {
        return (long) Math.pow(2, (this.seq - 1));
    }
/**
     * 权限值求和
     */
 sum |= item.getPrivilegeValue();

代码流程简述
1,权限配置在apollo中,由于使用的是ConfigurationProperties注解,更改不会自动更新,而且需要转下格式,使用ApolloConfigChangeListener进行监听

 @ApolloConfigChangeListener
    private void onKeyChange(ConfigChangeEvent changeEvent) {
        Set<String> changedKeys = changeEvent.changedKeys();
        for (String key : changedKeys) {
            if (key.equals("family.privilege.settings")) {
                //转换格式
                this.refreshFamilyPrivilegeSettings();
            }
        }
        //更新配置
        this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
    }

    private void refreshFamilyPrivilegeSettings() {
        Map<String, List<PrivilegeSettings>> newSettingsMap = Maps.newHashMap();
        //xxx 解析;格式:{"priv.family":[{"groups":[1,2,3],"seq":1},{"groups":[1],"seq":2},{"groups":[1],"seq":3}]}
        settingsMap = newSettingsMap;
    }

2,通过privilegeGroup(比如2:普通权限),就可以获取到各个模块支持的功能权限点


3,通过 sum |= item.getPrivilegeValue();获取到各个模块的权限值和

{
        "priv.family-member": 1,
        "priv.family": 1,
        "priv.family-scene": 35,
        "priv.family-config": 3,
        "priv.family-device": 1027,
        "priv.family-room": 1
}

4,若想要判断该用户是否有某个模块某个功能的权限,只需先判断用户在哪个权限组,根据模块key获取到对应功能值。与上面获取到的sum取&,若大于0则代表有该功能的权限。

相关文章

  • 模型设计

    一、模型整体设计 二、模型说明 该设计参考现在比较通用的权限管理设计模式,权限管理模型包括 2.1 用户表 ...

  • odoo中的权限管理

    odoo的权限管理总结,经验之谈,欢迎指正。 模型权限设置 在一个模块中新建了一个模型都必须对此模型进行权限配置,...

  • 权限管理模型

    今天学习了一个比较有趣的权限模型。比如用户在一个系统中有不同的权限,这些权限称为一个权限组:1、管理员权限: 管理...

  • 02-Flask-用户认证和权限管理数据库模型设计

    认证管理 + 权限分配 初始化 认证管理 新建数据库 需要的插件 建立认证蓝图 建立用户ORM模型 权限分配 权限...

  • spring-boot-plus V1.4.0发布 集成用户角色

    RBAC用户角色权限 用户角色权限部门管理核心接口介绍 Shiro权限配置 ? Shiro权限配置 数据库模型图 ...

  • 2021-03-25 Day9

    #产品小记 RBAC权限管理模型 对于B端产品,多数会遇见权限管理问题。比如,不同部门、不同职位的人权限是不同的。...

  • 如何设计权限系统

    # 权限系统的数据模型 常用的数据模型如图,设计角色的目的是为了方便批量管理用户的权限;设计权限码的目的是避免角色...

  • shiro权限框架课程目标精讲篇(1)

    1 课程目标:1、了解基于资源的权限管理方式2、掌握权限数据模型3、掌握基于url的权限管理(不使用shiro...

  • 原创-大数据平台权限设计分享-Hive库表权限

    权限目标 可通过界面管理用户访问hive库表权限,权限设计模型如下图 用户拥有hive库表权限列表image.pn...

  • 2018-03-28权限管理(04)

    权限管理: 进程安全上下文: 进程对文件的访问权限应用模型: 进程的属主与...

网友评论

      本文标题:权限管理模型

      本文链接:https://www.haomeiwen.com/subject/jqjybrtx.html