PHP设计模式之工厂模式(权限分配)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// 抽象基类 User
abstract class User{
 
    protected $name = NULL;
 
    // 构造函数
    function User($name){
        $this->name = $name;
    }
 
    // 获取属性$name
    function getName(){
        return $this->name;
    }
 
    // 浏览权限
    function ViewAccess(){
        return "No";
    }
 
    // 编辑权限
    function EditAccess(){
        return "No";
    }
 
    // 删除权限
    function DeleteAccess(){
        return "No";
    }
     
    // 管理权限
    function ManageAccess(){
        return "No";
    }
}
 
// 普通用户
class Client extends User{
 
    function ViewAccess(){
        return "Yes";
    }
}
 
// 编辑
class Manager extends User{
 
    function ViewAccess(){
        return "Yes";
    }
 
    function EditAccess(){
        return "Yes";
    }
}
 
// 管理员
class Administrator extends User{
 
    function ViewAccess(){
        return "Yes";
    }
 
    function EditAccess(){
        return "Yes";
    }
 
    function DeleteAccess(){
        return "Yes";
    }
}
 
// 技术人员
class Supporter extends User{
 
    function ViewAccess(){
        return "Yes";
    }
 
    function EditAccess(){
        return "Yes";
    }
 
    function DeleteAccess(){
        return "Yes";
    }
 
    function ManageAccess(){
        return "Yes";
    }
}
 
// 工厂类
class Factory{
 
    // 静态成员属性
    private static $users = array("Simon"=>"Client", "Elaine"=>"Administrator", "Bob"=>"Supporter", "Tom"=>"Manager");
 
    // 创建对象的成员方法
    static function Create($name){
 
        //根据成员属性的不同创建不同的对象
        switch (self::$users[$name]){
 
            case "Client":
                  return new Client($name);
            case "Manager":
                return new Manager($name);
            case "Administrator":
                  return new Administrator($name);
            case "Supporter":
                  return new Supporter($name);
        }
    }
}
 
// 一个存放用户名的数组
$users = array("Elaine", "Simon", "Bob", "Tom");
 
// 对于每个用户分析其权限
foreach($users as $user){
 
    $obj = Factory::Create($user);
 
    echo PHP_EOL.$obj->getName(),‘的权限‘,PHP_EOL;
    echo ‘浏览:‘,$obj->ViewAccess(),PHP_EOL;
    echo ‘修改:‘,$obj->EditAccess(),PHP_EOL;
    echo ‘删除:‘,$obj->DeleteAccess(),PHP_EOL;
    echo ‘管理:‘,$obj->ManageAccess(),PHP_EOL;
}
 
/*
结果:
Elaine的权限
浏览:Yes
修改:Yes
删除:Yes
管理:No
 
Simon的权限
浏览:Yes
修改:No
删除:No
管理:No
 
Bob的权限
浏览:Yes
修改:Yes
删除:Yes
管理:Yes
 
Tom的权限
浏览:Yes
修改:Yes
删除:No
管理:No
*/

  

PHP设计模式之工厂模式(权限分配)

上一篇:在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证


下一篇:PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)