YAFLogo

Posted by: RoloTomasi - Tuesday, 25 October 2011 01:02:40
Hello. I don't understand the code (in quote): We check for existing records with UserID IF @IsGuest = 0 AND NOT EXISTS(select top 1 1 from [{databaseOwner}].[{objectQualifier}ActiveAccess] WITH(NOLOCK) WHERE UserID = @UserID) and if no exist fill table for current user using guest access rights. But real rights for current user must be write bellow (in qoute 147-190 lines). Instead, for current user always will be write guest access rights. [code=sql] -- ensure that no duplicates and that the guest access rights always present in the access table if not exists (select top 1 UserID from [{databaseOwner}].[{objectQualifier}ActiveAccess] where UserID = @GuestID) begin insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, @IsGuest, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @GuestID end IF @IsGuest = 0 AND NOT EXISTS(select top 1 1 from [{databaseOwner}].[{objectQualifier}ActiveAccess] WITH(NOLOCK) WHERE UserID = @UserID) BEGIN -- no permissions... use guest access instead insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select @UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, 0, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @GuestID END -- get previous visit if @IsGuest = 0 begin select @PreviousVisit = LastVisit from [{databaseOwner}].[{objectQualifier}User] where UserID = @UserID end -- update last visit update [{databaseOwner}].[{objectQualifier}User] set LastVisit = @CurrentTime, IP = @IP where UserID = @UserID -- find missing ForumID/TopicID if @MessageID is not null begin select @CategoryID = c.CategoryID, @ForumID = b.ForumID, @TopicID = b.TopicID from [{databaseOwner}].[{objectQualifier}Message] a inner join [{databaseOwner}].[{objectQualifier}Topic] b on b.TopicID = a.TopicID inner join [{databaseOwner}].[{objectQualifier}Forum] c on c.ForumID = b.ForumID inner join [{databaseOwner}].[{objectQualifier}Category] d on d.CategoryID = c.CategoryID where a.MessageID = @MessageID and d.BoardID = @BoardID end else if @TopicID is not null begin select @CategoryID = b.CategoryID, @ForumID = a.ForumID from [{databaseOwner}].[{objectQualifier}Topic] a inner join [{databaseOwner}].[{objectQualifier}Forum] b on b.ForumID = a.ForumID inner join [{databaseOwner}].[{objectQualifier}Category] c on c.CategoryID = b.CategoryID where a.TopicID = @TopicID and c.BoardID = @BoardID end else if @ForumID is not null begin select @CategoryID = a.CategoryID from [{databaseOwner}].[{objectQualifier}Forum] a inner join [{databaseOwner}].[{objectQualifier}Category] b on b.CategoryID = a.CategoryID where a.ForumID = @ForumID and b.BoardID = @BoardID end -- update active -- ensure that access right are in place if not exists (select top 1 UserID from [{databaseOwner}].[{objectQualifier}ActiveAccess] WITH(NOLOCK) where UserID = @UserID ) begin insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, @IsGuest, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @UserID end [/code] sorry for my english.

Posted by: RoloTomasi - Tuesday, 25 October 2011 01:09:37
may be something like this: [code=sql] -- ensure that no duplicates and that the guest access rights always present in the access table if not exists (select top 1 UserID from [{databaseOwner}].[{objectQualifier}ActiveAccess] where UserID = @GuestID) begin insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, @IsGuest, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @GuestID end -- update active -- ensure that access right are in place if not exists (select top 1 UserID from [{databaseOwner}].[{objectQualifier}ActiveAccess] WITH(NOLOCK) where UserID = @UserID ) begin insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, @IsGuest, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @UserID end IF @IsGuest = 0 AND NOT EXISTS(select top 1 1 from [{databaseOwner}].[{objectQualifier}ActiveAccess] WITH(NOLOCK) WHERE UserID = @UserID) BEGIN -- no permissions... use guest access instead insert into [{databaseOwner}].[{objectQualifier}ActiveAccess]( UserID, BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, IsGuestX, LastActive, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, UploadAccess, DownloadAccess) select @UserID, @BoardID, ForumID, IsAdmin, IsForumModerator, IsModerator, 0, @CurrentTime, ReadAccess, (CONVERT([bit],sign([PostAccess]&(2)),(0))), (CONVERT([bit],sign([ReplyAccess]&(4)),(0))), (CONVERT([bit],sign([PriorityAccess]&(8)),(0))), (CONVERT([bit],sign([PollAccess]&(16)),(0))), (CONVERT([bit],sign([VoteAccess]&(32)),(0))), (CONVERT([bit],sign([ModeratorAccess]&(64)),(0))), (CONVERT([bit],sign([EditAccess]&(128)),(0))), (CONVERT([bit],sign([DeleteAccess]&(256)),(0))), (CONVERT([bit],sign([UploadAccess]&(512)),(0))), (CONVERT([bit],sign([DownloadAccess]&(1024)),(0))) from [{databaseOwner}].[{objectQualifier}vaccess] where UserID = @GuestID END -- get previous visit if @IsGuest = 0 begin select @PreviousVisit = LastVisit from [{databaseOwner}].[{objectQualifier}User] where UserID = @UserID end -- update last visit update [{databaseOwner}].[{objectQualifier}User] set LastVisit = @CurrentTime, IP = @IP where UserID = @UserID -- find missing ForumID/TopicID if @MessageID is not null begin select @CategoryID = c.CategoryID, @ForumID = b.ForumID, @TopicID = b.TopicID from [{databaseOwner}].[{objectQualifier}Message] a inner join [{databaseOwner}].[{objectQualifier}Topic] b on b.TopicID = a.TopicID inner join [{databaseOwner}].[{objectQualifier}Forum] c on c.ForumID = b.ForumID inner join [{databaseOwner}].[{objectQualifier}Category] d on d.CategoryID = c.CategoryID where a.MessageID = @MessageID and d.BoardID = @BoardID end else if @TopicID is not null begin select @CategoryID = b.CategoryID, @ForumID = a.ForumID from [{databaseOwner}].[{objectQualifier}Topic] a inner join [{databaseOwner}].[{objectQualifier}Forum] b on b.ForumID = a.ForumID inner join [{databaseOwner}].[{objectQualifier}Category] c on c.CategoryID = b.CategoryID where a.TopicID = @TopicID and c.BoardID = @BoardID end else if @ForumID is not null begin select @CategoryID = a.CategoryID from [{databaseOwner}].[{objectQualifier}Forum] a inner join [{databaseOwner}].[{objectQualifier}Category] b on b.CategoryID = a.CategoryID where a.ForumID = @ForumID and b.BoardID = @BoardID end [/code]

Posted by: bbobb - Tuesday, 25 October 2011 10:24:07
You're wrong:-d . But I fixed the logic as it should be.