Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 2 của 5 Đầu tiênĐầu tiên 1234 ... CuốiCuối
Kết quả 11 đến 20 của 43
  1. #11
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hi hoavokhuyetcntt,

    Tôi chưa coi kỹ lại bài viết phân quyền (Phấn I), nhưng dường như đã có thiếu sót trong bài hướng dẫn đó khi mọi người muốn Add thêm Form mới thì phải viết thêm code trong sự kiện MenuItem_Click như hình dưới đây để gọi Show Form mới được add vào khi người dùng click Menu.


  2. #12
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Một bài viết có giá trị, rất hay...Cám ơn bạn nhiều nhé Kelvin

  3. #13
    cám ơn bạn rất nhiều

  4. #14
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn phucpham ơi cho m hỏi 1 câu ngoài lề và hơi gà 1 tý nhá.Làm sao khi F5 thì cài Form con nó nằm full trong form Main vậy?Mà các controls của nó kéo dãn thế nào mà đệp vậy?M đã chỉnh properties của form khi load là Maximize nhưng load lên các controls hay textbox đều vỡ hết.Giúp m với nha!Cám ơn bạn trc

  5. #15
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Chào vgc0001,

    Bạn nên đặt những câu hỏi không liên quan đến topic ở ngoài box "Thắc mắc về lập trình C#".

    - Về câu hỏi của bạn thì tôi có thể hiểu ý bạn đang nói về :
    + WindowState (Normal, Minimized, Maximized).
    + Design Form : Khi design 1 Form thì người ta thường sử dụng các GroupBox or Panel để bao các controls bên trong lại, cũng là để tránh trường hợp "bị bể" kich thước của các control khi có sự thay đổ kich thước của Form.
    Các GroupBox, Panel này thường được Set thuộc tính Dock là TOP or BOTTOM or LEFT or RIGHT or FILL tùy theo nhu cầu cần sử dụng.
    Ngoài ra có thể set thuộc tính Anchor cho các controls bên trong GroupBox, Panel để tạo điểm neo cho các control này khi control cha của chúng thay đổi kích thước. Khi đó nó sẽ được cố định theo hướng nào.

    Cách tốt nhất bạn hãy thử trên 1 Form test có 1 số control nhất định và bạn thay đổi giá trị của chúng, sau đó cho kich thước của control cha (ở đây có thể Form hay là Panel,..) thay đổi bạn sẽ thấy sự khác biệt.

    Chúc bạn thành công

  6. #16
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    uh.Mình là lính mới nên chưa rõ lắm.Hì.Mình sẽ rút kinh nghiệm.Cảm ơn bạn phucpham nhiều.Mình làm đc rồi

  7. #17
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bài viết hay.
    Các bạn có thể thử làm trên web xem.[IMG]images/smilies/Surprised.gif[/IMG]


    Trích dẫn Gửi bởi phucpham
    Chào các bạn,

    Trong bài viết này tôi sẽ trình bày với các bạn 1 cách thức phân quyền trên methods (trong các classes) mà tôi đã học hỏi được trong quá trình làm việc. Cách thức phân quyền này sẽ đáp ứng đầy đủ các nhu cầu phân quyền trên các ứng dụng. Người sử dụng có thể tạo ra bao nhiêu [nhóm người], bao nhiêu [người sử dụng] tùy ý và tự do phân quyền cho các [nhóm người] này theo yêu cầu riêng của họ 1 cách rất dễ dàng và trực quan.

    Giả sử tôi có 1 tình huống như sau : Trong ứng dụng của tôi có nhiều nhóm người sử dụng, mỗi nhóm có quyền sử dụng các chức năng khác nhau trên ứng dụng này. Ở đây tôi chỉ đưa ra 2 nhóm người (tên nhóm chỉ mang ý nghĩa tượng trưng) làm ví dụ :
    Tôi có 1 Form đặt hàng, trên Form này có các buttons như : Thêm, Sửa, Xóa, Chấp Thuận, Từ Chối, .... và dành cho 2 nhóm người dưới đây sử dụng

    - Nhóm thứ nhất là nhóm nhân viên [ĐẶT HÀNG] : Nhóm này có nhiệm vụ đặt hàng (loại mặt hàng, số lượng cho mỗi mặt hàng, ..) khi nhận được yêu cầu cần đặt thêm hàng từ 1 nhóm người nào đó (ví dụ như nhóm Quản Lý Kho).
    - Nhóm thứ hai là nhóm [QUẢN LÝ](có thể gồm 1 hoặc hơn 1 người - chúng ta có thể hiểu là sếp của phòng này) : Nhóm này sẽ quyết định có đồng ý cho đặt số hàng này hay không (APPROVE or REJECT).


    Như vậy khi màn hình này được mở lên thì chương trình đã xác định được user đang sử dụng màn hình này thuộc nhóm người nào và được phép sử dụng các chức năng nào trên màn hình này : Như nhóm 1 thì chỉ được sử dụng các buttons : Thêm, Sửa, Xóa và nhóm được sử dụng các buttons : Chấp Thuận, Từ Chối là nhóm 2.

    Ở đây tôi đưa thêm ra 1 tình huống nữa là trên màn hình này còn có thêm 1 chức năng nào đó nữa dành cho nhóm thứ 3 mà thôi, nghĩa là những người thuộc [Nhóm 1] hoặc [Nhóm 2] sẽ không có quyền sử dụng chức năng này. Nếu 1 lúc nào đó trong [Nhóm 1] có 1 nhân viên được giao nhiệm vụ làm thêm chức năng này tạm thời trong 1 khoảng thời gian nào đó hoặc kiêm nhiệm hẳn luôn thì sao?


    => Lúc này ứng dụng của chúng ta sẽ cho phép [Admin-User] gán cho nhân viên này vừa thuộc [Nhóm 1] và [Nhóm 3] luôn thì nhân viên này sẽ có 2 tập quyền của 2 Nhóm [1 & 3] để đảm nhận công việc được giao.


    Dưới đây là các hình tuần tự cho việc phân quyền cho nhóm người sử dụng trên Form Authorization (Trên các Form dưới đây tôi đã không làm demo giống như tình huống ví dụ bên trên mà chỉ Show cho các bạn thấy màn hình hoạt động như nào cho 1 ví dụ khác đó là Form [Danh Mục Người Dùng - frmUser]). Login vào với tên PhucPHAM, pass : 123456 (user này thuộc nhóm [Quản Trị Hệ Thống] - Nếu muốn chạy được chương trình bắt buộc phải có nhóm này trước).

    - Trên màn hình này gồm có 3 methods cần phân quyền tương ứng với 3 buttons : Thêm, Sửa, Xóa. Nếu như user có đầy đủ 3 quyền trên thì đương nhiên khi mở màn hình này lên sẽ thấy cả 3 buttons như hình dưới đây



    - Tiếp theo tôi sẽ phân quyền cho nhóm [Kế Toán - Nhóm này đã được tạo trước trên Form [Nhóm Người Dùng - frmGroup]] bằng cách mở Form [Phân Quyền - frmAuthorization] -> Click chọn node [Nhóm Kế Toán] trong TreeView ở bên trái màn hình -> Sau đó click button Sửa -> Chọn [Danh Mục Người Dùng] trong TreeView -> Sau đó chọn các quyền trên Form này bằng cách check vào CheckBoxes trong ListView này :
    1. Sửa 1 người dùng
    2. Thêm 1 người dùng.





    (Có thể khi nhìn hình trên thì các bạn sẽ tự hỏi : TreeView có các node [Quản Trị Hệ Thống], [Danh Mục], [Xử Lý Nghiệp Vụ], [Báo Cáo Thống Kê] và các nodes con của [Quản Trị Hệ Thống] : [Danh Mục Người Dùng], [Danh Muc Nhóm Người Dùng], .. cũng như trong ListView có các Items như [Sửa 1 Người Dùng], [Thêm 1 Người Dùng], [Xóa 1 Người Dùng] ở đâu ra. Đó chính là MethodDescriptionAttribute mà trong code đã đánh dấu trên methods đó và nó được lưu xuống DB khi click [button GENERATE])

    - Sau đó chạy lại chương trình (bạn có thể click vào menuItem : Đăng Xuất) và Login với user : Accounting, Pass : 123456 (thuộc nhóm Kế Toán mới được phân quyền ở trên). Và lúc này mở Form frmUser lên thì sẽ không thấy button Delete đâu nữa mà chỉ có 2 button là Thêm, Sửa (tương ứng với 2 chức năng trên Form này được phân quyền ở trên).




    Và đây là Diagram của phần phân quyền : Bao gồm 8 tables



    1. tblUsers :
    2. tblGroups :
    3. tblGroupUser :
    4. tblMenu :
    5. tblMenuGroup
    6. tblModules : Table này chứa thông tin về các phần mà dự án của bạn có (trong code tôi đặt tên các modules nằm trong class clsModuleType.cs) giả sử như trong bản demo này tôi định nghĩa có 4 modules (xuất hiện trong TreeView thứ 2 của Form frmAuthorization là Quản Trị Hệ Thống, Danh Mục, Xử Lý Nghiệp Vụ và Báo Cáo Thống Kê). Các modules này sẽ được lưu xuống Database khi bạn click button [GENERATE] trên Form frmAuthorization.
    7. tblAuthorizations : Dữ liệu trong table này là các chức năng trên từng Form mà cần được phân quyền. Dữ liệu được định nghĩa trong các Business classes và nó cũng sẽ được lưu xuống DB khi click button [GENERATE] trên Form frmAuthorization.
    8. tblGroupAuthorization : Dữ liệu trong table này là các quyền được gán cho các nhóm và được lưu xuống Database khi click button [Lưu] trên Form frmAuthorization.

    Các tables [1->6] tôi đã nói ý nghĩa của nó trong Phần I rồi nên tôi không nhắc lại ở đây nữa.


    Về cấu trúc của Solution cho tutorial này để đơn giản tôi chỉ chia làm 2 Projects : Project [AuthorizationTest.Facade] (có Output Type là Class Library) bao gồm các classes : Logic, Business, DbAccess & Project còn lại là Project chính (main entry point nằm trong Project này) của chương trình. Các Forms về phân quyền (frmUser, frmGroup, frmAuthorization, ..) nằm trong folder Security của Project chính.

    Đối với dự án của các bạn có bao nhiêu Project hay bao nhiêu Solution đều có thể áp dụng cách thức phân quyền này.
    Các bạn chỉ cần nắm ý tưởng của cách phân quyền này là :

    - Khi developer viết code cần đánh dấu các classes và các methods trong classes đó (Chỉ các Classes cũng như các Methods cần phân quyền mới cần được đánh dấu) bằng các Attributes tương ứng (Có 3 Attribute classes : clsAuthorizationAttribute.cs, clsMethodBrowsableAttribute.cs, clsMethodDescriptionAttribute.cs nằm trong thư mục common của Project [AuthorizationTest.Facade]. Ba classes này rất đơn giản gần như chỉ kế thừa từ System.Attribute class mà thôi).

    (Cách sử dụng các Attribute Classes này tôi sẽ nói rõ hơn ở bên dưới).
    - Trong app.config file (chi tiết được giải thich ở dưới) chỉ ra file(s) dll nào có chứa các methods cần phân quyền để khi chạy thì chương trình sẽ đọc các methods trong đó.
    - Khi ở chế độ Edit trên Form Authorization thì sẽ xuất hiện GENERATE button (với điều kiện là key "ADMIN_MODE" trong app.config file là true). Khi button này được click thì chương trình sẽ đọc các classes được đánh dấu Attributes và tìm từng methods được đánh dấu Attributes trong Classes đó và insert xuống DB.
    - Sau khi đã có dữ liệu (các methods cần được phân quyền) dưới Database thì Admin-User có thể phân quyền sử dụng các methods này cho các nhóm người sử dụng ngay trên form này luôn.
    - Khi 1 user thuộc group(s) nào đó Login vào chương trình thì chương trình sẽ SELECT 1 tập hợp các Menus (có được qua phân quyền trên Menu), Methods (có được qua phân quyền trên Method) mà GROUP(s) đó có quyền sử dụng rồi sau đó chương trình sẽ check cái method sẽ sử dụng có nằm trong cái tập hợp ở trên hay không. (Ở đây tôi ví dụ là các buttons : Thêm, Sửa, Xóa, .. các buttons này gọi các methods tương ứng Insert, Update, Delete, .. Các bạn hoàn toàn có thể phân quyền cho sử dụng hay không các controls khác mà không cần có sự thay đổi về mặt Coding).


    * Một class quan trọng trong phần phân quyền này là clsSecurityManager.cs trong thư mục BusninessService của Project [AuthorizationTest.Facade]. Class này chứa các methods dùng để đọc các Assemblies (là các dll files được chỉ ra trong app.config file).

    * Về technique có lẽ sẽ rất khó khăn cho các bạn thuộc nhóm [Junior Developer] để các bạn có thể hiểu hết được code trong Solution này. Do đó tôi có trình bày cách thức áp dụng cho application của các bạn nếu các bạn muốn phân quyền theo cách này ngay dưới đây (các bạn không cần phải hiểu hết cũng có thể làm được):

    ÁP DỤNG :

    1. Facade Project :
    Trong các classes (Business) của mọi người class nào có functions cần phân quyền thì mọi người thêm clsAuthorizationAttribute Attribute [clsAuthorization] lên trên đầu class đó.
    Vi dụ class clsUserBS :

    [clsAuthorization]
    public class clsUserBS

    - Sau đó trên Methods (functions) cần phân quyền (trong class này luôn) thì mọi người Add Attribute (MethodDescriptionAttribute). MethodDescriptionAttribute này có 3 tham số : ModuleType (thuộc nhóm chức năng nào của dự án), Form Description, Function Description. ModuleType này tùy thuộc vào dự án bạn đang phát cần chia ra những nhóm chức năng nào thì các bạn định nghĩa và map nó vào các classes thuộc nhóm chức năng đó bằng cách khai báo trong clsMethodDescription. Như ở đây tôi định nghĩa mẫu có 4 nhóm chức năng : Quản Trị Hệ Thống, Danh Mục, Xử Lý Nghiệp Vụ và Báo Cáo - Thống Kê. Và method Insert của class User là nằm trong ModuleType là Administration, Form User sẽ sử dụng nó và mô tả nó là "Thêm Một Người Sử Dụng".

    Ví dụ method Insert:

    Mã:
    [clsMethodDescription(ModuleType.Administration, clsFormName.USER, clsFunctionName.SC_AddUser)]    public bool Insert(clsUser objUser, List<clsGroupUser> lstGroupUser)    {        DbAccess db = new DbAccess();        db.BeginTransaction();         try        {                            //1. Insert a record into Users table            db.CreateNewSqlCommand();            db.AddParameter("@LoginID", objUser.LoginID);            db.AddParameter("@Password", objUser.Password);            db.AddParameter("@FullName", objUser.FullName);            db.AddParameter("@Email", objUser.Email);            db.AddParameter("@CreatedDate", objUser.CreatedDate);            db.AddParameter("@LockedUser", objUser.LockedUser);            db.AddParameter("@LockedDate", objUser.LockedDate);            db.AddParameter("@LockedReason", objUser.LockedReason);            db.AddParameter("@LastLogIn", objUser.LastLogIn);            db.AddParameter("@LastChangedPassword", objUser.LastChangedPassword);            db.AddParameter("@DeadlineOfUsing", objUser.DeadlineOfUsing);             db.ExecuteNonQueryWithTransaction("spUser_Insert");             //2. Insert records into GroupUser table            for (int i = 0; i < lstGroupUser.Count; i++)            {                db.CreateNewSqlCommand();                db.AddParameter("@GroupID", lstGroupUser[i].GroupID);                db.AddParameter("@LoginID", lstGroupUser[i].LoginID);                db.ExecuteNonQueryWithTransaction("spGroupUser_Insert");            }             db.CommitTransaction();            return true;        }        catch        {            db.RollbackTransaction();            return false;        }    }
    Tất cả các parameters trên đều đã được viết enum hoặc thành các const trong các classes tương ứng.

    - Trong class này mọi người thêm 1 enum và 1 function nữa để trên Form có thể gọi đó là :


    Mã:
            public enum UserAction { Insert, Update, Delete, MultilangUI }        public bool IsAuthorized(UserAction action)        {            string sMethodName = string.Empty;            switch (action)            {                case UserAction.Insert:                    sMethodName = "Insert";                    break;                case UserAction.Update:                    sMethodName = "Update";                    break;                case UserAction.Delete:                    sMethodName = "Delete";                    break;                     }             return clsSecurityManager.IsAuthorized(typeof(clsUserBS).GetMethod(sMethodName));        }
    + Enum UserAction : Có các phần tử là Insert, Update, Delete, MultilangUI. Cái này tùy thuộc vào các Form mà mọi người có thể định nghĩa các phần tử tương ứng.
    + Function IsAuthorized : Dùng để check action (Insert, Update ...) được gọi từ trên Form có hợp lệ hay ko?


    2. Trên Form :
    Đơn giản thêm 1 function để set phần phân quyền cho Form bằng cách gọi funtion IsAuthorized từ Business class. Function này sẽ được gọi ở sự kiện Form_Load hoặc Form_Shown của Form tùy thuộc vào bạn.

    Ví dụ Form Danh Mục Người Dùng:

    Mã:
    private void SetAuthorization()    {        ucDataButton1.AddNewVisible = userBS.IsAuthorized(clsUserBS.UserAction.Insert);        ucDataButton1.EditVisible = userBS.IsAuthorized(clsUserBS.UserAction.Update);        ucDataButton1.DeleteVisible = userBS.IsAuthorized(clsUserBS.UserAction.Delete);                //ucDataButton1 là 1 user control chứa các buttons : Thêm, Sửa, Xóa, ... trong folder UserControl của Project AuthorizationTest.Main        //userBS là 1 instance của class clsUserBS    }
    3. File app.config

    Mã:
    <?xml version="1.0" encoding="utf-8" ?><configuration>  <configSections>    <section name="security" type="System.Configuration.DictionarySectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>  </configSections>  <security>    <add key="AuthorizationTest.Facade" value="true" />  </security>    <connectionStrings>    <!--<add name="DBConn" connectionString="Data Source=VIETDUC\SQLSERVER_2005; Initial Catalog=Framework; User Id=sa; Password=admin2005"/>-->    <add name="DBConn"            connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DB\Framework.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"            providerName="System.Data.SqlClient" />  </connectionStrings>  <appSettings>    <add key="ADMIN_MODE" value="true"/>  </appSettings></configuration>
    Giải thích :

    <security>
    <add key="AuthorizationTest.Facade" value="true" />
    </security>

    Ở đây là chỉ ra dll file : AuthorizationTest.Facade.dll mà chương trình sẽ đọc các functions có Attribute [clsMethodDescription ..] nằm trong các classes có Attribute [clsAuthorization]. Do đó chỉ các business class nào có phân quyền các methods của nó thì mới cần thêm Attribute này trên đầu class đó. (Nếu dự án của bạn lớn thì có thể có nhiều hơn 1 dll cần phân quyền ở đây - cái này tùy thuộc vào Architecture mà bạn đang xây dựng)

    <appSettings>
    <add key="ADMIN_MODE" value="true"/>
    </appSettings>

    Chương trình dựa vào giá trị true/false để có cho hiển thị button [Update Menu - Cập nhật designed menu xuống DB] trên Main Form & button [GENERATE - Cập nhật các functions có đánh dấu cần phân quyền (qua Attribute) xuống DB] trên Form Authorization (ở chế độ Edit) hay không.



    P/S :

    * Bài viết không thể đi sâu vào tất cả chi tiết của phần phân quyền do đó có vấn đề gì chưa rõ ràng các bạn có thể đặt câu hỏi tôi sẽ trả lời các bạn trên diễn đàn này. (Nếu muốn đọc hiểu bài code của bài viết này thì các bạn phải
    tương đối rõ về mô hình 3 lớp - tất nhiên ở đây tôi không nói tới Senior Developers [IMG]images/smilies/smile.png[/IMG].)

    * Do viết lại Demo Solution đưa lên đây nên có thể có bugs (tới thời điểm này cá nhân tôi chạy thì bình thường). Do đó nếu các bạn download về chạy phát hiện ra bugs thì post lên giùm tôi nhé.

    * Nếu các bạn muốn chạy từ đầu nghĩa là trong DB chưa có dữ liệu thì các bạn chú ý tới vấn đề sau : Default phải có 1 LoginID, Password để có thể Login vào chương trình. Trong này có 1 User : PhucPHAM, Password : 123456 thuộc nhóm [Quản Trị Hệ Thống]. Bắt buộc phải có những thông tin này trong table tblUsers & tblGroups. Tất nhiên là các bạn có thể thay đổi bằng tên user khác cũng như tên group khác nhưng Group đó phải có Field IsAdmin = true & 1 User thuộc nhóm này.

    * Khi chạy các bạn có thể Restore DB trong thư mục Release/DB vào trong SQL Server 2005 (nhớ sửa ConnectionString trong app.config) hoặc có thể để nguyên như vậy để Test.

    * Nếu dữ liệu trong DB là empty ngoại trừ có 1 thông tin về Admin Group & 1 User thuộc nó thì các bạn nhớ Set

    Mã:
    <appSettings>    <add key="ADMIN_MODE" value="true"/> //Nếu = "false" có nghĩa chương trình sẽ lấy dữ liệu từ DB lên để bind cho Menu => Không có MenuItem nào hết.  </appSettings>

    Khi có giá trị true thì chương trình sẽ để nguyên Menu được Design trên Main Form. Lúc này sẽ xuất hiện button [Update Menu]. Các bạn Click button để Insert các Menu Item của Menu trên xuống DB. Sau đó mở Form [frmAuthorization : Phân Quyền Cho Nhóm Người Dùng] -> Click button [Sửa] -> Xuất hiện button [GENERATE] -> Click button này để insert toàn bộ dữ liệu từ các ModuleType, MethodDescription, .. vào tables (tblModules, tblAuthorization) trong DB.

    Ngay tại thời điểm này các bạn đã có thể tạo ra các Groups (trên Form Danh Mục Nhóm Người Dùng) cũng như các Users (trên Form Danh Mục Người Dùng) và phân quyền các methods cho các nhóm người dùng, tuy nhiên tại vì lúc này Menu trong Form [Phân Quyền Cho Nhóm Người Dùng] đang Empty do đó chưa phân quyền cho Menu được. Các bạn muốn phân quyền Menu cho các nhóm người dùng thì (mở file app.config bằng tay và set <add key="ADMIN_MODE" value="false"/> HOẶC click vào MenuItem [Cập Nhật Menu] -> Form [Set ADMIN_MODE] xuất hiện, các bạn chọn Off và click OK button thì nó sẽ Update key ADMIN_MODE = "false"). Sau đó các bạn chạy lại chương trình lúc này chương trình sẽ lấy dữ liệu từ DB cho Menu cũng như phần Phân Quyền.



    Link Phần I : http://forums.congdongcviet.com/showthread.php?t=26610

  8. #18
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    thank bạn nhiều nha bạn quả là pro

  9. #19
    cho mình hỏi: làm sao để mà checkboxlist có thể check được những nhóm mà user thuộc khi mà mình click vào datagridview??

  10. #20
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Một năm trôi qua rồi không biết có ai còn quan tâm

    Hiện tại em áp dụng (thực ra là bê nguyên cái framework của anh) vào solution.
    - Em add thêm 2 project nữa là XXX.Core XXX.Present.
    - Project XXX. Core em dùng NHibernate (hoặc có thể chuyển sang Repository Patter). Project XXX.Present sẽ implement XXX.Core. XXX.Prensent sẽ chứa các form xử lý nghiệp vụ như danh mục hàng hóa, báo cáo, kho hàng,...etc... Cuối cùng XXX.Main sẽ gọi các win form từ XXX.Present.
    - Em phải tổ chức phức tạp như vậy vì lớp DAL rất khác (NHibernate, hoặc cũng tại bởi em rất ghét viết mấy hàm CRUD).
    - Cách đã làm (và tất nhiên không "chạy" đúng):
    + add thêm một key vào:
    <security>
    <add key="AuthorizationTest.Facade" value="true"/>
    <add key="Sonomi.Present" value="true"/>
    </security>

    + Đổi output của XXX.Present từ windows Application sang class Libraly
    + Gắn tag vào đầu mỗi class (form):
    [clsAuthorization]
    public partial class frmloaihang : frmBase

    và gắn:
    [clsMethodDescription(ModuleType.Catalogue, clsFormName.LOAIHANG, clsFunctionName.SC_Addloaihang)]
    - Lỗi: Đã tes tử nếu làm như vậy ở Project XXX.Facade thì chạy đúng, nhưng khi phân quyền ở Project khác thì không.
    - Cuối cùng: Em muốn hỏi là cách làm của em có quá trâu bò hoặc ngu ngốc không? Và không chạy đúng thì có khả năng rơi vào đâu? Hoặc ít ra là một vài ý kiến bình luận, ... etc

 

 
Trang 2 của 5 Đầu tiênĐầu tiên 1234 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •