lesson 2: diego iot用户管理

在物联网平台中,非常重要的一个部分就是用户管理,最本质的问题是数据是谁的。一般情况下数据既不属于物联网平台,也不属于设备的制造商,而数据产生者才是数据的正真拥有者,这个拥有者可以是个人,比如现在比较流行健康手环,这个手环所产生的数据应该属于手环的使用者,而手环的生产者或者物联网平台,在未经购买者同意是无权查看和使用这些私人数据,否则就属于侵犯个人隐私;拥有者也可以是任何形式的组织,企业,公益组织等,这些组织使用第三方提供的设备所产生的数据,应该属于这些组织所有,而不是设备的制造者。所有在物联网的设计中必须充分考虑数据的安全性,基于此设计严格的用户权限管理体系。

  1. 用户管理的整体架构

从整个物联网平台层面来看,用户管理分为Iot平台的用户管理,和组织内部的用户管理

  • IOT平台用户管理,主要是负责整个平台运营层面的用户管理,而不涉及组织内部的用户管理,其是不可以查看组织内部数据的。
  • 组织内部的用户管理,主要针对组织内部的用户的用户管理,如哪些用户可以查看某个设备的状态数据,哪些用户进一步可以查看设备的运行数据,其用户权限管理的特征是,详细到对组织设备,设备产生的数据进行权限管理
  • 用户需要注册成为IOT平台用户,后可以创建组织

2. IOT 平台用户管理

对应IOT平台的用户,其主要是针对平台功能模块的权限管理,一个注册的组织,他具有的功能权限,而不具备组织的数据权限,一般有如下功能

  • 超级管理员,平台的管理员,其具有平台层面的全部权限
  • 组织管理,对组织的注册进行审核,监管
  • 服务管理,可以定义每个组织所能在平台所享有的服务权限
  • 交易管理,对于有偿服务,需向用户提供交易功能,这就会涉及到一系列有关交易过程的管理,比如订单管理,价格管理等

3. 组织用户管理

下图是组织层面的用户管理架构图

  • 管理员,平台用户创建组织后,即成为该组织的管理员,对组织内的用户管理,设备管理等具有全部的权限,可以管理用户组,和用户。
  • 权限的管理粒度一般为对象级,如一个设备,可以定义此设备的可视权限,设备的数据权限,定义的粒度越细则管理越精细。权限一般不能被修改,系统会根据设计,自动生产对象的相关权限。
  • 用户组可以说是一组权限和用户的对应集合。一个用户组拥有多个权限,同时也可拥有多个用户;管理员对用户组有增删改的权限;一般系统会创建一个管理员的用户组,在此组内的用户都具有管理员的权限
  • 用户即针对使用系统的单一个体用户,组织的管理员,可以创建用户,并将用户加入到某个用户组,以分配相应的用户权限。用户也可以接受组织的邀请,成为组织下的用户,一个用户可以属于多个组织。

4. 实现

这里只做主要部分的设计,具体的代码可以查看开源代码(目前还在开发中,代码有很多问题,故还为upload到GitHub,呆开发到一定程度即会开源)

4.1界面设计

  • 在用户管理菜单下,依次有User,User Group, Permission,Organization
  • 用户可以通过右上角的组织菜单,切换自己所属的不同组织,组织切换完成,相应的权限都基于组织进行切换

4.2. 数据结构

注:diego iot采用python开发,并使用到Django 的web架构,如下是数据结构的设计

class User_Ext(models.Model):
   user =models.ForeignKey(User)
   mobile_phone = models.CharField(max_length=30)
   qq = models.CharField(max_length=20)
   wechat = models.CharField(max_length=20)
class Organization(models.Model):
   name = models.CharField(max_length=40)
   description = models.CharField(max_length=50)
   address = models.CharField(max_length=50)
   city = models.CharField(max_length=60)
   state_province = models.CharField(max_length=30)
   country = models.CharField(max_length=50)
   logo=models.CharField(max_length=40,default="logo")

#the relation between user and organization
class User_Organization(models.Model):
   user=models.ForeignKey(User)
   organization=models.ForeignKey(Organization)
   role_in_organization=models.IntegerField()#0:owner,1:Admin,2:Viewer

#the iot permission object
class Permission_Ext(models.Model):
   name = models.CharField(max_length=40,default='new permission')
   for_object = models.IntegerField()#0:eqp
   object_id = models.IntegerField(default=1)
   organization=models.ForeignKey(Organization)
   description = models.CharField(max_length=50)
   permission_code = models.CharField(max_length=50,default='permission code')

#the iot group object
class Group_Ext(models.Model):
   name=models.CharField(max_length=40,default='new group')
   organization=models.ForeignKey(Organization)
   description = models.CharField(max_length=50)

#the relationship for permission_ext and group_ext
class Permission_Group_Ext(models.Model):
   permission_ext=models.ForeignKey(Permission_Ext)
   group_ext=models.ForeignKey(Group_Ext)

#the relationship for user and group_ext
class User_Group_Ext(models.Model):
   user=models.ForeignKey(User)
   group_ext=models.ForeignKey(Group_Ext)

 

 

发表评论

Scroll to top
%d 博主赞过: