[关闭]
@bravf 2018-03-30T05:44:01.000000Z 字数 1304 阅读 659

Use Lock Manager

未分类


Table.UseLock

ID 钥匙 钥匙类型 开始时间 结束时间 权限类型 是否禁用
1 eric A_a A a-b-c 临时 18-3-30 12:00 18-3-30 13:00 in false
2 eric A_a A b-c-d 临时 18-3-30 14:00 18-3-30 15:00 in false
3 lucy B_a B A-B-C 长期 18-3-30 00:00 19-3-30 00:00 in false
4 lucy B_a B - - 18-3-30 12:00 18-3-30 14:00 ex false

权限解释

1、每行数据表示一个人对一个锁在一段时间里的开锁权限
2、权限类型包括可开锁、不可开锁
3、如果是可开锁类型,则需要有钥匙
4、钥匙有【临时、长期】类型
5、权限可以被【禁用、恢复】和删除


查 lucy 对 锁B_a 在 18-3-20 12:25 里是否可以开锁 (lucy可能是space运营人员)

  1. function canOpen(user, lockId, dateTime){
  2. var userLockList = select * from Table.UseLock where user=lucy and lock=B_a
  3. // 如果没有记录,则开不了门
  4. if (!userLockList.length){
  5. return false
  6. }
  7. // 从后往后查记录
  8. for (var i=userLocList.length-1, o; i>=0; i--){
  9. var o = userLockList[i]
  10. // 如果在区间内
  11. if (isSpan(dateTime, o)){
  12. if (o.useType === 'in'){
  13. return true
  14. }
  15. else {
  16. return false
  17. }
  18. }
  19. }
  20. return false
  21. }
  22. canOpen('lucy', 'B_a', Date('2018-03-30 12:25:05'))

接口

增加使用记录

Url: /useLock/add

Input:
1、user
2、lockId
3、doorId
3、startDateTime
4、endDateTime
5、useType

Output:
{
success: true or false
}

查询是否可以开锁

Url: /useLock/canOpen

Input:
1、user
2、lockId
3、dateTime

Output:
{
success: true or false,
data: {
canOpen: true or false,
key: 'xxxx',
keyType: ''
}
}


分配锁使用逻辑

step1

step2

step3

总结

每次的权限调整都增加新的记录项,当进行权限校验时,从后往前对比所有记录项,从而得到相应结果。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注