アクセス制御クライアントは、クライアントは明日仕事に行く、あなたがプログラムの例を見ることができ、文書が書かれている、データ列を制御するプログラムを書くために夜の真ん中により1ポイントあったこと、または弾丸をかむとプログラムを調整合意しました顧客の実際のニーズを満たすことを望んで。
実際には、店舗の権限は、透けて見える、非常に単純なことですが、ある「何か権利どのリソースにオブジェクトは何?」このロジックは、この設計のように、あなたを[OK]を保存することができ、他の人が簡単にプログラムを読むことができ、簡単には、データベースの設計を理解するために、簡単にいくつかを維持します。
矛盾していない周りの思想と、システム全体の外に達成するために、いくつかのリンクの多くは、アイデア、混乱を矛盾した表示され、簡単ではありませんので、時間が自分自身を思い出させるために、自分たちの権利のシステムは「に基づいているものは、どのリソースに反対しますこの考え方に反した場合にどのような権利?「デザインの指導思想は、自分の考えを再編成し、深く考えるように注意してくださいます。
どのオブジェクト:システム内のさまざまなオブジェクトを決定することはユニークであり、そして2つのパラメータを必要とする、クラスオブジェクトは、領収書にERP(順序番号)のような主キーオブジェクトです。
どのようなリソース:どのようなリソースと同じですが、また、リソースを識別するための分類、ユニークな主キーを必要としています。
どのような権限:最も簡単な方法は、それはあまりにも面倒であるとして識別するための権限、および将来の拡張性「を備えてどの+モジュール」の代わりに許可フォーム、一意性を識別するための唯一の主キー、保守性を持っていることです一部が悪い、私たちは、複雑な状況に適応する柔軟にすることはできません。
その制御テーブルの列と同じ理由である権限の定義があるはず、、、「表の列のアクセス制御」と呼ばれる権限は、オブジェクトがユーザーまたは役割が何であるか、どのようなリソースが各テーブルに記載されています。
解決すべき問題があること:非常に多くのテーブルは、フィールドは何ですか?すべての手動入力に依存している場合、それは本当に死んだの外にある、言っていない正確ではない、あなたはスーパー患者がない限り、繰り返し精度と効率を達成するために、それ以外の場合は難しい維持し、タイピングを終わる;アイデアは、問題を解決するためのものである:「私たちは設計しないでください詳細なPowerDesignerのデータモデルそれ?だけでなく、これを取るコードを生成し、また、ドキュメントデータテーブルのフィールドを生成することができます」
1:まず、あなたが権限を定義する必要があり、この権限は、「表の列のアクセス制御」と呼ばれています。
2:私たちは、設計原理を達成するためにことを、まず、テーブル、楽譜、その他の様々な分野のハード構成でPowerDesignerの設計、データベーステーブルは何ですか、どのようなフィールドが自動的にこの設計から生成されるべきではなく、手動でデータを再入力します。
3:その後、我々は、この、コードジェネレータは、自動的にこれらのテーブルを生成するように、生成されたコードを改善し、うまく設計されたフィールドの説明を再利用します。
4:その後、我々は自動的に記述されたプログラムの良いテーブル構造によって生成されたこれらの実行、その後、我々はされていることができますの内容を設定します。
/// 自动生成设置表字段
/// </summary>
private void SetTableColumns()
{
this .UserCenterDbHelper.Open();
BaseRoleManager roleManager = new BaseRoleManager( this .UserCenterDbHelper, this .UserInfo);
roleManager.SetTableColumns();
BaseUserManager userManager = new BaseUserManager( this .UserCenterDbHelper, this .UserInfo);
userManager.SetTableColumns();
BaseStaffManager staffManager = new BaseStaffManager( this .UserCenterDbHelper, this .UserInfo);
staffManager.SetTableColumns();
BaseModuleManager moduleManager = new BaseModuleManager( this .UserCenterDbHelper, this .UserInfo);
moduleManager.SetTableColumns();
this .UserCenterDbHelper.Close();
}
5:那运行好后,数据库里,就会有表结构的字段说明数据(这些都是代码自动生成的,靠人工输入会搞死人的,表结构有变化了,重新运行一次就OK了,省事了,彻底可以做到全自动化了,爽啊)。
6:在运行权限设置页面,用户、角色的字段访问权限可以进行设置了。
7:设置用户的字段访问权限效果图如下:
8:在没控制表格列的访问控制时,运行效果如下:
9:按权限控制后,显示出来的表格为,没有允许访问的字段,不是公开的字段,就无法看到了,都被隐藏掉了:
10:数据列的权限控制代码如下参考:
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd.
// ------------------------------------------------------------
using System;
using System.Data;
using System.Web.UI.WebControls;
namespace DotNet.Web.Permission
{
using DotNet.Business;
using DotNet.Manager;
using DotNet.Utilities;
/// <remarks>
/// TableColumns
/// 表字段权限的例子
///
/// 修改纪录
///
/// 版本:1.0 2010.07.13 JiRiGaLa 写好例子程序方便别人学习。
///
/// 版本:1.0
///
/// <author>
/// <name> JiRiGaLa </name>
/// <date> 2010.07.13 </date>
/// </author>
/// </remarks>
public partial class TableColumns : BasePage
{
protected void Page_Load( object sender, EventArgs e)
{
// 当然是用户需要登录,否则哪里能知道,现在是判断谁的权限啊?
this .UserInfo = Utilities.Login( " [email protected] " , String.Empty);
// 设置表字段
// this.SetTableColumns();
// 先设置表格的字段状态
this .CheckUserTableColumnsPermission();
// 显示用户
this .GeUserList();
}
/// <summary>
/// 自动生成设置表字段
/// </summary>
private void SetTableColumns()
{
this .UserCenterDbHelper.Open();
BaseRoleManager roleManager = new BaseRoleManager( this .UserCenterDbHelper, this .UserInfo);
roleManager.SetTableColumns();
BaseUserManager userManager = new BaseUserManager( this .UserCenterDbHelper, this .UserInfo);
userManager.SetTableColumns();
BaseStaffManager staffManager = new BaseStaffManager( this .UserCenterDbHelper, this .UserInfo);
staffManager.SetTableColumns();
BaseModuleManager moduleManager = new BaseModuleManager( this .UserCenterDbHelper, this .UserInfo);
moduleManager.SetTableColumns();
this .UserCenterDbHelper.Close();
}
private void GeUserList()
{
// 获取用户列表
BaseUserManager userManager = new BaseUserManager();
DataTable dataTable = userManager.GetDT();
this .grvUser.DataSource = dataTable;
this .grvUser.DataBind();
}
private void CheckUserTableColumnsPermission()
{
// 当前用户能访问那些字段?
this .UserCenterDbHelper.Open();
BaseTableColumnsManager tableColumnsManager = new BaseTableColumnsManager( this .UserCenterDbHelper, UserInfo);
DataTable dataTable = tableColumnsManager.GetTableColumns( this .UserInfo.Id, " Base_User " );
this .UserCenterDbHelper.Close();
for ( int i = 0 ; i < this .grvUser.Columns.Count; i ++ )
{
if ( this .grvUser.Columns[i] is BoundField)
{
BoundField boundField = (BoundField) this .grvUser.Columns [I];
// フィールドを見ることができるかどうか? boundField.Visible = BaseBusinessLogic.Exists(のdataTable、BaseTableColumnsTable.FieldColumnCode、boundField.DataField); } } } } }
ます。https://my.oschina.net/iwenr/blog/227624で再現