`
daoger
  • 浏览: 530545 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

讨论:用户操作唯一性管理

阅读更多
我们的项目是一个具有工作流特性的B/S系统;现在处于功能测试阶段,前几天一个同事提出一个问题:

系统中的很多工作都必须有步骤的进行,比如,先做计划,然后实施,再查看结果。
系统中的用户权限分为浏览和操作,用户在模块中的权限是交错的,在一个模块可以操作而在另一个模块
只能浏览操作结果。

现在的情况是如果在同一时间有两个或多个对同一模块具有操作权限的用户在这一模块中进行操作的话,可能会引起
操作结果冲突的现象;比如A和B两个人都可以做发电计划,A、B两个人如果在同一时间都给电厂分配电量,那么电厂接到的
发电计划会冲突或者造成数据丢失!

现在我们想到的解决方法是

1.在数据库中给每一个模块建立一个操作步骤存储表,根据步骤标志位的判断解决冲突!

2.在服务器上作一个托盘,实时检测用户登录,当有一个用户在这一模块中进行操作时,进入这一模块的另一用户不管权限大小都
只分配浏览权限,并给用户以提示!

3.通过权限控制,两个对同一模块都具有操作权限的用户,谁先登录本模块谁就有操作权,后登录的只有浏览权;设定先登录用户
使用时间,时间一到再进行操作就需要重新登录,再进入时如果已经有用户在操作就给他分配浏览权限!


第一种方法实现最简单,但是数据交互量增加,交互频繁!
第二种方法实现起来应该比较麻烦,但是更能符合需求;
最后一种缺乏人性化!

请知各位是怎样解决这一问题的?请不吝赐教!
请积极拍砖!
分享到:
评论
15 楼 XMLDB 2006-12-30  
按标志位来,在不远的将来就可以看到有一些谁都不能操作的数据了,哈哈
14 楼 daoger 2006-12-30  
XMLDB 写道
daoger 写道
Lucas Lee 写道
这个问题,我以前在学习Louts workflow的时候见过它的处理方式,可以借鉴一下:
任何排他性的操作之前有一个申请的动作,要进入实际操作前必须申请,申请动作其实就是做一个并发操作控制,申请后则自动获得实际操作的权利,然后其他用户无法申请进行此操作了。

实际上,就是加了一个排他锁,想进入则先获得此锁。


我们现在的想法和你的说法差不多;可问题是用户进入的时候我可以比较容易的实现排他锁,现在的困难就是怎么让他进行完操作后释放排他锁,让其他用户获得!

不知你有没有好的解决方法?
在BS这种异步应用环境下,就别想CS的加锁解决方案了,前人已经总结了加version标志,更新后查询是否操作正确是最实用的方法.


看来能尽快解决的方法就只能用标志位了!
13 楼 daoger 2006-12-30  
clamp 写道
奇怪,大家都觉得自己理解需求了吗?这么迫不及待的给技术解决方案啊……

我问个需求澄清问题:
是否存在以下这种情况,一个模块中有多个实例记录?
比如编辑计划
存在着多份计划,A/B两个用户都有编辑计划的权限,
在同一时刻A/B都能使用编辑计划这个功能,但是只能编辑不同的计划,而不能编辑相同的计划。



是这样的,每个人制定的计划都是根据各自对业务的理解而来的,一样的可能性不大!

还有一点就是,我们的功能基本全部实现了,现在正在由用户进行功能测试,项目再有几个月就要投运了!如果采取楼上几位的方法需要大量修改现有表结构的话肯定是不可取的!

昨天又问了一下项目经理,如果暂时没有好的解决方法,就只能从权限上控制,暂时每一个模块只有一个具有操作权限的用户!

唉!

各位以前的B/S项目中没遇到这样的需求吗?
12 楼 XMLDB 2006-12-30  
daoger 写道
Lucas Lee 写道
这个问题,我以前在学习Louts workflow的时候见过它的处理方式,可以借鉴一下:
任何排他性的操作之前有一个申请的动作,要进入实际操作前必须申请,申请动作其实就是做一个并发操作控制,申请后则自动获得实际操作的权利,然后其他用户无法申请进行此操作了。

实际上,就是加了一个排他锁,想进入则先获得此锁。


我们现在的想法和你的说法差不多;可问题是用户进入的时候我可以比较容易的实现排他锁,现在的困难就是怎么让他进行完操作后释放排他锁,让其他用户获得!

不知你有没有好的解决方法?
在BS这种异步应用环境下,就别想CS的加锁解决方案了,前人已经总结了加version标志,更新后查询是否操作正确是最实用的方法.
11 楼 clamp 2006-12-30  
奇怪,大家都觉得自己理解需求了吗?这么迫不及待的给技术解决方案啊……

我问个需求澄清问题:
是否存在以下这种情况,一个模块中有多个实例记录?
比如编辑计划
存在着多份计划,A/B两个用户都有编辑计划的权限,
在同一时刻A/B都能使用编辑计划这个功能,但是只能编辑不同的计划,而不能编辑相同的计划。

10 楼 XMLDB 2006-12-30  
rtdb 写道
需要开一个CHECKOUT表,重要资源还要有编码。
当用户申请CHECKOUT某资源时,
查表看该资源是否已被别人CHECKOUT, 若有,CHECKOUT失败,
若无记录,增加一记录,表明该资源已被该用户CHECKOUT,返回成功。

CHECKIN时简单地确认是同一用户CHECKOUT的,则删除该记录即可。

按楼主的说法,请问那Checkout 表的操作用什么来保证操作唯一性?
9 楼 rtdb 2006-12-29  
需要开一个CHECKOUT表,重要资源还要有编码。
当用户申请CHECKOUT某资源时,
查表看该资源是否已被别人CHECKOUT, 若有,CHECKOUT失败,
若无记录,增加一记录,表明该资源已被该用户CHECKOUT,返回成功。

CHECKIN时简单地确认是同一用户CHECKOUT的,则删除该记录即可。
8 楼 LucasLee 2006-12-29  
daoger 写道
Lucas Lee 写道
这个问题,我以前在学习Louts workflow的时候见过它的处理方式,可以借鉴一下:
任何排他性的操作之前有一个申请的动作,要进入实际操作前必须申请,申请动作其实就是做一个并发操作控制,申请后则自动获得实际操作的权利,然后其他用户无法申请进行此操作了。

实际上,就是加了一个排他锁,想进入则先获得此锁。


我们现在的想法和你的说法差不多;可问题是用户进入的时候我可以比较容易的实现排他锁,现在的困难就是怎么让他进行完操作后释放排他锁,让其他用户获得!

不知你有没有好的解决方法?


简单的,就是一个标志位(比如存在数据库中),0则可被获取,1则已被锁定。
用户完成后,提交时则重置标志。

这是最简单的。可以在此基础上变化。
7 楼 daoger 2006-12-29  
rtdb 写道
就是Checkout/Checkin么。
用户操作前先要Checkout,加锁成功后获得更新权限,
完成后要Checkin,在Checkin时保存数据及释放锁定。


能说得具体一些吗?
6 楼 rtdb 2006-12-29  
就是Checkout/Checkin么。
用户操作前先要Checkout,加锁成功后获得更新权限,
完成后要Checkin,在Checkin时保存数据及释放锁定。
5 楼 daoger 2006-12-28  
Lucas Lee 写道
这个问题,我以前在学习Louts workflow的时候见过它的处理方式,可以借鉴一下:
任何排他性的操作之前有一个申请的动作,要进入实际操作前必须申请,申请动作其实就是做一个并发操作控制,申请后则自动获得实际操作的权利,然后其他用户无法申请进行此操作了。

实际上,就是加了一个排他锁,想进入则先获得此锁。


我们现在的想法和你的说法差不多;可问题是用户进入的时候我可以比较容易的实现排他锁,现在的困难就是怎么让他进行完操作后释放排他锁,让其他用户获得!

不知你有没有好的解决方法?
4 楼 LucasLee 2006-12-28  
这个问题,我以前在学习Louts workflow的时候见过它的处理方式,可以借鉴一下:
任何排他性的操作之前有一个申请的动作,要进入实际操作前必须申请,申请动作其实就是做一个并发操作控制,申请后则自动获得实际操作的权利,然后其他用户无法申请进行此操作了。

实际上,就是加了一个排他锁,想进入则先获得此锁。
3 楼 daoger 2006-12-28  
leelun 写道
用Hibernate的Version字段,控制每次只能由一人保存数据,如果出现Version冲突,就回滚并重新读取数据


一个步骤中有很多任务,一个任务也可以出现很多结果,这很多结果可能都是正确的;如:给电厂分配发电量,只要是在机组发电负荷之下的都可以认为是正确的!

我没用过Version字段,不知道是不是要修改数据库,即便是现在修改代码,工作量也不小啊!

再说这是依赖于hibernate,如果用其他映射框架呢?

查查用Hibernate的Version字段的用法,呵呵!
2 楼 XMLDB 2006-12-28  
做version control不就好了?
old = getNewestValue();
while(old != new) {
  updateChangeFromNew(old,new);
  old = getNewestValue();
}
1 楼 leelun 2006-12-28  
用Hibernate的Version字段,控制每次只能由一人保存数据,如果出现Version冲突,就回滚并重新读取数据

相关推荐

    论坛数据库管理系统.doc

    1. 用户管理: - 用户登录:用户需输入正确的用户名和经过加密的密码才能进入系统。 - 用户注册:用户填写个人信息,包括密码、性别等,系统会检查用户名的唯一性。 - 个人信息编辑:用户可以随时更新其用户名、...

    操作系统磁盘管理代码~~

    在本文中,我们将深入探讨操作系统如何进行磁盘管理,并基于提供的"DiskManage"压缩包文件,讨论其中可能包含的相关代码和设计。 1. **磁盘管理的基本概念** - 磁盘分区:为了更好地组织和管理磁盘空间,操作系统...

    Linux用户管理

    在深入探讨Linux用户管理之前,我们先明确一点,即Linux作为一款功能强大且安全的多用户操作系统,用户管理是其核心功能之一。用户与组的管理不仅是确保系统安全的关键,也是实现资源高效利用的基础。本文将围绕...

    impl_用户管理server层_

    下面将详细讨论用户管理server层的关键知识点及其在实际开发中的应用。 首先,用户管理server层是整个用户管理系统的核心,它的主要职责包括: 1. **用户注册与认证**:这是用户管理的基础,server层需要接收并...

    BBS论坛系统数据库设计.doc

    - 验证码(checkno):可能用于验证操作的合法性。 5. **公告管理表(TAB_NOTICEMANAGE)**:管理论坛的公告: - 公告ID(noticeid):公告的唯一标识,自增。 - 公告时间(noticetime):公告发布的日期。 - 公告内容...

    网站后台管理操作手册样本.doc

    网站后台管理操作手册样本主要涵盖了如何有效地管理网站的各类信息,包括内容发布、修改和删除。以下是手册中涉及的关键知识点: 1. **进入后台**:首先,管理员需要通过登录界面进入后台首页面,通常需要输入...

    设计用户管理模块PPT学习教案.pptx

    这包括单元测试、集成测试和系统测试,以验证用户管理的所有功能是否按预期工作,如添加、修改和删除操作的正确性,以及权限分配的有效性。 6. **教学方法**: - 使用项目教学法、分组讨论法和理论实践一体化的...

    操作系统课程设计 二级文件管理系统

    9. 磁盘管理:虽然在课程设计中可能不会深入到磁盘物理层面,但理解文件如何在磁盘上分配空间是重要的,这涉及到簇、扇区和磁道的概念。 10. 性能优化:通过对文件和目录的操作进行适当的设计,如采用哈希表或B树...

    数据库课程设计:游泳馆会员管理系统.zip

    - 会员管理系统可能会涉及多步骤的操作,如充值或购买会员卡,这需要事务的支持来保证数据的一致性。 - 事务具有ACID(原子性、一致性、隔离性和持久性)特性,确保操作的完整性。 9. **备份与恢复**: - 定期...

    《操作系统》第2章作业管理和用户接口.pptx

    本章主要讨论的是作业管理和用户接口,这是操作系统的重要功能之一,旨在提高用户与计算机系统的沟通效率。 首先,用户与操作系统之间的接口是操作系统设计的关键,分为命令接口和程序接口。命令接口是用户直接通过...

    论坛管理系统数据库设计sqlserver/mysql+包含sql语句

    论坛管理系统是互联网上常见的一种互动交流平台,它允许用户发表观点、进行讨论和分享信息。在设计这样的系统时,数据库的构建是核心部分,确保数据的高效存储、检索和管理。本篇文档将深入探讨如何使用SQL Server或...

    sql+jsp的简单论坛简介论文

    【SQL + JSP 简单论坛系统】是一个基于JSP技术开发的在线讨论平台,主要涉及用户管理和帖子管理两大核心功能。系统采用三级管理模式,包括普通用户、版主和论坛管理员,各等级用户拥有不同的操作权限。 1. **用户...

    1.熟悉和掌握数据库的创建和表的方法 2.熟悉和掌握创建三类数据完整性(实体完整性、参照完整性和用户自定义)约束 掌握用命令方式管理数据的基本操作

    综上所述,这个实验提供了丰富的数据库管理和操作经验,不仅涵盖基本的数据库创建和表的建立,还深入到数据完整性的实现,以及数据的增、删、改操作,是学习和理解数据库操作的重要实践。通过这些操作,我们可以更好...

    有关操作系统的文件管理

    操作系统中的文件管理是计算机系统的重要组成部分,...总之,文件管理是操作系统中的关键技术,它关系到用户对数据的访问效率和安全性。通过对文件系统的深入理解和实践,我们可以更好地利用计算机资源,提高工作效率。

    jy.rar_php注册_php登录注册_注册管理php_用户管理

    这些功能一般由管理员后台实现,提供对所有用户数据的控制和监控,确保网站的正常运营和用户行为的合规性。 在实际开发中,为了提高安全性,还会考虑使用CSRF(跨站请求伪造)令牌来保护敏感操作,使用HTTPS协议...

    OpenEulr用户和权限管理

    在OpenEulr操作系统中,用户和权限管理是系统安全性和资源访问控制的关键部分。学习这一主题,您将深入理解如何有效地管理用户、用户组以及文件和目录的访问权限,从而确保系统的稳定运行和数据安全。 首先,让我们...

    学生信息管理系统设计方案

    《学生信息管理系统设计方案》不仅详细阐述了系统的设计思路与功能模块,还深入讨论了数据库设计的重要性。该系统通过自动化信息管理流程,显著提升了学生信息处理的效率和准确性,有助于学校管理者做出更加精准的...

    Linux用户和组管理问与答.pdf

    在Linux操作系统中,用户和组的管理是系统安全和权限控制的核心部分。本文将深入探讨这一主题,重点关注《Linux用户和组管理问与答》中提及的知识点。 首先,我们讨论的是 `/etc/passwd` 文件,这是一个至关重要的...

    基于jsp的bbs论坛系统

    1. 用户管理:用户注册、登录、个人信息管理等功能,确保用户身份的安全性和唯一性。注册过程可能涉及邮箱验证或手机验证码,以增强账户安全性。 2. 论坛版块:不同的主题分类,如技术讨论、生活分享等,方便用户按...

Global site tag (gtag.js) - Google Analytics