C#許可權管理和設計淺談

來源:互聯網
上載者:User

此文主要想和大家分享的是這段時間,對許可權管理和設計的斷斷續續的思考學習,和個人的一些軟體開發等方面的看法。

提到'許可權管理和設計',大家可能會第一時間想到這園子裡的 吉日嘎拉,在這方面他可以算是'大牛'或專家 ——他的'通用許可權管理系統',究竟做的怎樣,看看他的部落格就差不多可以知道了(貌似我在給他做推廣,呵呵...,but in fact,is not),別的暫且不敢說,最起碼可以看出他研究的比較深入和狂熱,其系統也具有一定的'成熟度等級',用他的話來說——就是在努力做到他的極致。他做的是通用許可權管理系統,那麼何為‘通用'?我談下個人的理解:

a. (主流)資料庫通用 ——即利用工廠等模式,可以方便適應不同(類型的)資料庫,保證軟體的可移植性。這點重點在資料庫設計上!

b. 許可權管理和判斷 思想上的通用,相同解決或實現方法 or 思路 可以用在不同的開發語言和項目類型(大的方面 如:b/s 和 c/s)上,像吉日的許可權系統 ——這方面,通用在,可應用在C#語言開發的web和WinForm程式中。 ——我個人認為:(實現上的)思想(或稱之為 解決方案)通用更為重要,就像是一個不錯的 購物車的實現思路或方案,可以很好的用在php、jsp、C#等語言開發的項目中。【問題的解決方案基本上與程式設計語言無關,不同的只是實現】。

我對許可權管理和設計的思考和學習,其主要目的想:能在以後的項目開發中,利用自己的想法或(開發出)類似吉日兄弟的‘許可權管理系統',可以快速有效實現軟體中的許可權管理部分(個人目前對許可權管理部分感覺還是件挺棘手的事情)。而學習和思考,我並不是僅僅局限於自己的(空)想法,也學習和研究一些 我自己感覺可完善自己的思路、可借鑒的項目案例,像:吉日的許可權系統,(通用許可權管理系統)FrameWork104Src,MemberShip,phpcms,ecshop等 ——但由於時間的關係,目前只粗略的看了下前面的兩個。【思考和學習,或是研究,我建議的方法是:先自己確定或理出大概的思路,再借鑒和參考學習其它與你所研究方向相同的項目案例(最好是大型 具有一定的'成熟度等級'的項目),以完善自己的思路,(對參考項目)揚長補短,這樣你的研究才能站在一個較高的起點(可稱之為‘站在巨人的肩膀上',呵呵),且研究的結果也不至於'太失敗';因為你的想法就是再好再獨特,你也無法考慮周全,可能你自以為不錯的想法,只能算是考慮到了問題某一方面的,與優秀的相比就沒有可比性。比如:之前有人找我給他開發CMS系統,我就建議他:CMS系統如果想做好不是一個人能能完成的,是個比較龐大的工程,如果真想自己開發,最好借鑒下phpcms等流行的CMS系統,要不然做出來的東西 無論是功能上 還是易用性上,可能都不及人家一半。做項目或研究,不能盲目的去做,要多參考和學習優秀的項目,否則你的項目或研究就會'死'在開發上!】。 複製代碼 代碼如下:/// <summary>
/// 獲得使用者的許可權,操作許可權
/// </summary>
private void GetPermission()
{
this.DbHelper.Open();

// 使用者的操作許可權
this.btnUserAdd.Enabled = this.IsAuthorized("User.Add");
this.btnUserDelete.Enabled = this.IsAuthorized("User.Delete");
this.btnUserExport.Enabled = this.IsAuthorized("User.Export");
this.btnUserImport.Enabled = this.IsAuthorized("User.Import");
this.btnUserPrint.Enabled = this.IsAuthorized("User.Print");
this.btnUserUpdate.Enabled = this.IsAuthorized("User.Update");
// 角色的操作許可權
this.btnRoleAdd.Enabled = this.IsAuthorized("Role.Add");
this.btnRoleDelete.Enabled = this.IsAuthorized("Role.Delete");
this.btnRoleExport.Enabled = this.IsAuthorized("Role.Export");
this.btnRoleImport.Enabled = this.IsAuthorized("Role.Import");
this.btnRolePrint.Enabled = this.IsAuthorized("Role.Print");
this.btnRoleUpdate.Enabled = this.IsAuthorized("Role.Update");

this.DbHelper.Close();
}

如上是 吉日的許可權系統Permission項目中的一段代碼,其作用,大家一看便知——根據當前登入使用者的許可權,判斷頁面上的按鈕是否可用,之所以帖出來,是因為我個人感覺:這段代碼不夠簡潔有效,建議可以考慮用集合來處理判斷許可權[這也是我已基本上考慮好,在自己的研究中可行 簡單的方法,具體的想法還需要進一步整體考慮後,再和大家交流]。

在看(通用許可權管理系統)FrameWork104Src系統時,也感覺其許可權判斷處理上有些繁瑣,更重要的是,發現了一個bug——可能在不少軟體中,都容易疏忽的地方——許可權判斷不夠徹底。好的許可權管理的實現,其結果應該是確保軟體足夠的安全,(從根源上)禁止使用者"做他不能做的事"。此bug就是:我以A使用者的身份登入系統後,此使用者沒有添加會員的許可權,但我為了測試其許可權控制的是否夠徹底,直接在Url中訪問 添加會員頁面,誰知,進去了,不過,還好的是 在點擊確定按鈕時彈出'沒有此操作許可權'的提示 ——所以,在這裡提醒下,目前正在做許可權管理功能或模組的朋友,請檢查下你軟體中許可權管理是否夠安全徹底。操作按鈕等不可見或不可用,並不能從根源上控制‘使用者'操作,一定要在提交的方法或處理中加上許可權判斷。就像是:登入或註冊等頁面的提交js驗證,無論寫的多麼完善或強大,都必須在後台代碼中加必要的判斷!

好了,暫時就寫到這兒吧,(發現有時用心寫篇部落格,很需要時間,呵呵),希望有在做這方面研究的朋友多提意見!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.