因此,F(xiàn)orum 中各種操作權(quán)限是和ForumPermissions 定義的用戶級(jí)別有關(guān)系的,作為接口Forum 的實(shí)現(xiàn):ForumProxy 正是將這種對(duì)應(yīng)關(guān)系聯(lián)系起來。比如,修改Forum 的名稱,只有論壇管理者或系統(tǒng)管理者可以修改,代碼如下:
public class ForumProxy implements Forum {
private ForumPermissions permissions;
private Forum forum;
this.authorization = authorization;
public ForumProxy(Forum forum, Authorization authorization,
ForumPermissions permissions)
{
this.forum = forum;
this.authorization = authorization;
this.permissions = permissions;
}
.....
public void setName(String name) throws UnauthorizedException,
ForumAlreadyExistsException
{
//只有是系統(tǒng)或論壇管理者才可以修改名稱
if (permissions.isSystemOrForumAdmin()) {
forum.setName(name);
}
else {
throw new UnauthorizedException();
}
}
...
}
而DbForum 才是接口Forum 的真正實(shí)現(xiàn),以修改論壇名稱為例:
public class DbForum implements Forum, Cacheable {
...
public void setName(String name) throws
ForumAlreadyExistsException {
....
this.name = name;
//這里真正將新名稱保存到數(shù)據(jù)庫(kù)中
saveToDb();
....
}
...
}
凡是涉及到對(duì)論壇名稱修改這一事件,其他程序都首先得和ForumProxy 打交道,由ForumProxy 決定是否有權(quán)限做某一樣事情,F(xiàn)orumProxy 是個(gè)名副其實(shí)的“網(wǎng)關(guān)”,“安全代理系統(tǒng)”。
我們已經(jīng)知道,使用Forum 需要通過ForumProxy,Jive 中創(chuàng)建一個(gè)Forum 是使用Factory 模式,有一個(gè)總的抽象類ForumFactory,在這個(gè)抽象類中,調(diào)用ForumFactory 是通過getInstance()方法實(shí)現(xiàn),這里使用了Singleton,getInstance()返回的是ForumFactoryProxy。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |