C#權限管理和設計淺談

2011年04月18日11:18  來源:IT168 作者:know@more
 字號:

  權限管理是很多軟件中相當重要的一個模塊它的設計的好壞直接影響到軟件的安全性、權限管理的可擴展性和易操作性 以及代碼中權限判斷的復雜程度和效率等方面。此文主要想和大家分享的是這段時間,對權限管理和設計的斷斷續續的思考學習,和個人的一些軟件開發等方面的看法。

  提到"權限管理和設計",大家可能會第一時間想到這園子裏的 吉日嘎拉,在這方面他可以算是"大牛"或專家 他的"通用權限管理系統",究竟做的怎樣,看看他的博客就差不多可以知道了(貌似我在給他做推廣,呵呵...,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.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驗證,無論寫的多麽完善或強大,都必須在後臺代碼中加必要的判斷!

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

  【免責聲明】本文僅代表作者本人觀點,與和訊網無關。和訊網站對文中陳述、觀點判斷保持中立,不對所包含內容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,並請自行承擔全部責任。

我有話說已有0位網友發言看看大家都說了啥

  您好,歡迎您發表評論!  (言論僅代表會員個人觀點,不代表和訊網觀點)

   

相關新聞 相關新聞 查看關於 權限管理 的微博
相關推薦
感謝您的參與!
查看[本文全部評論]

    訂閱新聞  和訊微薄  添加到收藏夾  反饋意見

 

騰訊科技 | C114中國通信網 | 飛象網 | 中國家電網 | 挖貝網 | 手機中國 | 51nb專門網 | 科技訊 | 移動Labs | 通信世界網 | CTI論壇 | 賽迪網 | 新華網科技 | 中國軟件網 | 中國質檢網 | 通信產業網 | 比特網 | 支點網 | 上方網 | 小熊在線 | 速途網 | 易觀網 | 慧聰家電網 | CNET科技資訊網 | 睿商在線 | 鈦媒體 | 安卓網 | 光電新聞網 | 百道網 | 科技次世代網 | 人民網IT | 安智網 | 手機之家 | 環球家電網 | 新網 | 網秦 | iPhone威鋒網 | 億邦動力網 | 光明網IT | 環球網科技 | 虎嗅網 | e800 | 科易網 | 中國軟件資訊網 | pc6軟件下載 | DOIT| 安防知識網 | 站長網 | 第一家電網 | 科技資訊網 | 驅動中國 | 華北新聞網 | 蝌蚪五線譜網 | 大公科技 | 機房360 | 暢享網 | UC瀏覽器 | 移聯名商 | 華強北 | 中國電子銀行網 | 一財科技 | XDA智能手機網 | ZDNet至頂網| 蜂鳥網| e-works |博瑞網 |央廣網科技 |會計家園 |

環球企業家 | 東方企業家 | 創業邦 | 數字商業時代 | 中國經濟和信息化 | 商業周刊中文版 | 光明日報 | 新京報 | 法制晚報 | 北京青年報 | 中國計算機報 | 電腦報 | 申請友鏈
 

新聞熱線:010-85651220

招商電話:010-85651220

E-mail: it@staff.hexun.com

地址:北京市朝陽區朝陽門外大街22號泛利大廈11層

郵編:100020

傳真:010-85650806