comparison Lib/ObjectStore/CDBI/Users.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
comparison
equal deleted inserted replaced
-1:000000000000 0:03e58a454b20
1 #!/usr/bin/perl -w
2 use strict;
3
4 package ObjectStore::CDBI::Users;
5 use Common;
6 use Digest::MD5 qw(md5_hex);
7 our @ISA = qw(Object);
8
9 our $Namespace;
10 our $DataModule;
11
12 our $Prefix = $Namespace ? $Namespace.'::' : '';
13
14 if ($DataModule) {
15 $DataModule =~ s/::/\//g;
16 $DataModule .= '.pm';
17 require $DataModule;
18 }
19
20 BEGIN {
21 DeclareProperty DSNamespace => ACCESS_NONE;
22 }
23
24 sub CTOR {
25 my ($this,%args) = @_;
26
27 $this->{$DSNamespace} = $args{'DSNamespace'};
28 }
29
30 sub ClassName {
31 return $_[0]->{$DSNamespace} ? $_[0]->{$DSNamespace}. $_[1] : $_[1];
32 }
33
34 sub FindUser {
35 my ($this,$uname) = @_;
36
37 my @Users = $this->ClassName('Principal')->search(Name => $uname);
38 return shift @Users;
39 }
40
41 sub CreateUser {
42 my ($this,$uname,$description,$active) = @_;
43
44 if (my $user = $this->FindUser($uname)) {
45 die new Exception("The user is already exists",$uname);
46 } else {
47 return $this->ClassName('Principal')->insert({Name => $uname, Description => $description, Active => $active});
48 }
49 }
50
51 sub DeleteUser {
52 my ($this,$objUser) = @_;
53
54 $objUser->delete;
55 }
56
57 sub GetUserAuthData {
58 my ($this,$objUser,$objSecPackage) = @_;
59
60 my @Data = $this->ClassName('AuthData')->search(User => $objUser,Package => $objSecPackage->Name);
61 return $Data[0];
62 }
63
64 sub SetUserAuthData {
65 my ($this,$objUser,$objSecPackage,$objAuthData) = @_;
66
67 if (my $AuthData = $this->GetUserAuthData($objUser,$objSecPackage)) {
68 $AuthData->AuthData(objAuthData->SessionAuthData);
69 $AuthData->update;
70 } else {
71 $this->ClassName('AuthData')->insert({ User => $objUser, Package => $objSecPackage->Name, AuthData => $objAuthData->SessionAuthData});
72 }
73 }
74
75 sub CreateSession {
76 my ($this,$SSID,$objUser,$objAuthData) = @_;
77
78 my $session = $this->ClassName('Session')->insert({SSID => $SSID, User => $objUser, SecData => $objAuthData->SessionAuthData, LastUsage => DateTime->now() });
79 $session->autoupdate(1);
80 return $session;
81 }
82
83 sub CloseSession {
84 my ($this,$objSession) = @_;
85
86 $objSession->delete;
87 }
88
89 sub LoadSession {
90 my ($this,$SSID) = @_;
91 my @Data = $this->ClassName('Session')->search(SSID => $SSID);
92 if ($Data[0]) {
93 $Data[0]->autoupdate(1);
94 return $Data[0];
95 }
96 }
97
98 sub construct {
99 return __PACKAGE__->new(DSNamespace => $Prefix);
100 }