对于如何实现一个非常基本的机制,记录多个用户在应用程序中所做的事情,我需要一些建议。当另一个特性运行时,我需要更改应用程序,以限制功能。
用例示例用户可以正常编辑无薪记录。如果应用程序然后运行一个Payrun进程(Long),那么我需要更改应用程序的某些部分,以在短时间内限制功能(例如。将现有的无薪记录改为只读)。
对于如何在.net应用程序中做到这一点,有什么建议吗?
体系结构细节
2008 Web服务器场
F 217
该解决方案是一个只读的extranet web报告应用程序和内部(防火墙)数据输入和数据处理应用程序(数据的小单项和大批量导入)。
发布于 2010-05-17 03:27:58
通常,我们在数据库层中处理这个问题,因为单独计算机上的各个应用程序并不直接了解彼此。应用程序可以在执行操作之前或定期检查数据库,或者底层存储过程可以使用某种简单的表和信号量的锁定来管理模式。
在单个服务器上的非分布式web应用程序上,您可以使用application对象很容易地处理这个问题,因为实际上只有一个应用程序,而且它可以相当容易地监视用户活动。
让我们假设您只有两种模式,并且所有事情都是在存储过程中处理的:
模式中一个用户在做某种投递操作和正常模式。让我们假设POSTING操作中的操作相对简单,为了清楚起见,我们将省略确保没有竞争条件的代码,并将所有代码内联,而不是封装到其他SPs或函数中:
CREATE PROCEDURE Post
AS
BEGIN
UPDATE ModeControl
SET Mode = 'POSTING'
UPDATE Payments
SET Whatever = whatever
WHERE whatever
UPDATE ModeControl
SET Mode = 'NORMAL'
END
CREATE PROCEDURE IsPosting -- poll this in your app or before performing operations
AS
BEGIN
IF EXISTS (SELECT * FROM ModeControl WHERE Model = 'POSTING')
RETURN 1
ELSE
RETURN 0
END
CREATE PROCEDURE Normal1
AS
BEGIN
-- Catches potential problems at database even though app shouldn't call in 'POSTING' more
IF EXISTS (SELECT * FROM ModeControl WHERE Model = 'POSTING')
RAISERROR...
-- Perform Normal1 operations
END
CREATE PROCEDURE Normal2
AS
BEGIN
IF EXISTS (SELECT * FROM ModeControl WHERE Model = 'POSTING')
RAISERROR...
-- Perform Normal2 operations
END显然,如果您有一个完整的数据访问层和一些框架位,您可以装饰您的方法,并使用反射自动对您的方法进行分类,并检查不允许的模式,从而将其绑定到某种状态机类型的东西中。
https://stackoverflow.com/questions/2846468
复制相似问题