BPM là một công cụ giúp cho việc quản lý và vận hành doanh nghiệp được hiệu
quả hơn. Vấn đề an ninh là một trong các vấn đề quan trọng cần phải được xem xét
trong tất cả các pha của vòng đời BPM và việc cài đặt chính sách an ninh vào BPM là
thực sự cần thiết. Luận văn đã trình bày phương pháp tích hợp các chính sách truy
nhập (cụ thể là điều khiển truy nhập theo vai trò RBAC) vào pha mô hình hóa của
vòng đời BPM bằng mở rộng ngôn ngữ BPMN 2.0 cho các yêu cầu an ninh. Ứng dụng
phương pháp để mở rộng công cụ Activiti BPM cho việc cài đặt các chính sách an
ninh. Tại pha mô hình hóa của Activti, xây dựng metamodel cho BPMN tích hợp
RBAC và sinh ra cú pháp trừu tượng; sau đó, tại pha thực thi quy trình, kiểm tra một
số chính sách an ninh trước khi phân quyền cho người sử dụng. Kết quả của luận văn
đã được ứng dụng vào việc xây dựng một số quy trình nghiệp vụ tại Trung tâm Tư vấn
Thiết kế Mobifone.
Tuy nhiên, trong luận văn mới chỉ dừng lại ở bước tích hợp các chính sách an
ninh vào pha mô hình hóa của BPM và tại pha thực thi, việc kiểm tra tính thỏa mãn
của các chính sách an ninh khi phân quyền cho người dùng đang dừng lại ở các trường
hợp đơn giản. Hệ thống lớn lên, các chính sách an ninh ngày càng phức tạp thì việc
kiểm tra, phát hiện việc vi phạm các ràng buộc lại trở nên nan giải hơn. Ví dụ, trong
trường hợp, người dùng được gán nhiều quyền, các quyền lại được kế thừa lẫn nhau,.
Để giảm sự phức tạp của việc quản lý an ninh, cần phải sử dụng các công cụ hỗ trợ
việc kiểm tra tính đúng đắn, tính toàn vẹn của các yêu cầu an ninh trong BPM. USE
tool là một công cụ cho phép mô hình hóa phần mềm và kiểm tra tính chính xác của
các mô tả UML, USE rất đơn giản và hiệu quả cho việc kiểm tra các chính sách an
ninh. Vì vậy, hướng phát triển tiếp theo của luận văn là sử dụng USE tool cho việc
thực thi chính sách an ninh của BPM. Hy vọng trong thời gian tới, tôi có thể phát triển
và hoàn thiện nội dung này.
Qua việc thực hiện luận văn, tôi đã thu được rất nhiều kiến thức bổ ý về hệ thống
quản lý quy trình nghiệp vụ trong doanh nghiệp cũng như kiến thức về các kỹ thuật
phát triển phần mềm hiện đại. Tuy nhiên, do kiến thức có hạn nên trong luận văn
không thể tránh khỏi những sai sót, khiếm khuyết, tôi rất mong nhận được sự góp ý
của quý thầy cô để luận văn được hoàn thiện hơn.
                
              
                                            
                                
            
 
            
                 59 trang
59 trang | 
Chia sẻ: yenxoi77 | Lượt xem: 982 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang tài liệu Luận văn Mở rộng công cụ Activiti cho đặc tả và cài đặt chính sách an ninh - Đỗ Anh Việt, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Intermediate 
Event 
Liên quan đến các sự kiện xảy ra giữa thời điểm bắt 
đầu và kết thúc của quy trình nghiệp vụ. Những sự 
kiện này không ảnh hưởng đến quy trình do chúng 
không bắt đầu hoặc kết thúc. 
End Event 
Cho biết sự kết thúc của quy trình nghiệp vụ. Nên có 
ít nhất một End Event trong quy trình. 
 Activities biểu diễn các nhiệm vụ hoặc công việc đang được thực hiện trong quy 
trình nghiệp vụ. Trong sơ đồ BPMN, chúng được biểu diễn bằng hình chữ nhật tròn 
góc. Các loại activities khác nhau là Task, Sub-Process và Call-Activity 
Loại Biểu diễn Ý nghĩa 
Task 
Được sử dụng khi có một Activity được cài đặt 
trong một quy trình. Các loại Tasks khác nhau 
được cung cấp bởi BPMN là : 
 Script task: sử dụng để tự động hóa 1 Task, 
các logic được cài đặt ở đây. 
 User task: sử dụng khi quy trình yêu cầu 
tương tác với con người. 
 Mail task: Là một loại dịch vụ để gửi e-mails 
hoặc thông báo từ quy trình 
 Service task: Là một Task tùy chỉnh khi muốn 
một số hoạt động cụ thể được thực hiện 
Sub-
Process 
Biểu diễn các mức trong quy trình, giúp sơ đồ 
hiển thị đơn giản và dễ hiểu hơn. 
Call-
Activity 
Tái sử dụng các quy trình hoặc Task dùng chung 
và có sẵn trong hệ thống. Khi thực thi, hệ thống 
sẽ gọi tới các quy trình hoặc Task đó. 
 Gateways được sử dụng để xử lý rẽ nhánh hoặc nối các Paths trong quy trình. Mục 
đích chính của gateways là điều khiển luồng đi của quy trình. Các loại gateway là 
Exclusive GW, Inclusive GW, Parallel GW và Event-based GW. 
16 
Loại Biểu diễn Ý nghĩa 
Exclusive 
GW 
Được sử dụng khi chúng ta muốn thực hiện duy nhất 
một Path trong nhiều Paths. (câu lệnh If-else) 
Inclusive 
GW 
Được sử dụng khi chúng ta muốn thực hiện các 
Paths thỏa mãn điều kiện. (câu lệnh nhiều If) 
Parallel GW 
Tất cả các Paths đi ra sẽ được thực hiện mà không 
cần kiểm tra bất kì điều kiện nào. 
Event-based 
GW 
Paths sẽ được thực hiện dựa trên các sự kiện thỏa 
mãn điều kiện. 
Connecting objects 
Được dùng để biểu diễn kiến trúc quy trình nghiệp vụ. Mỗi Flow objects được 
kết nối với nhau sử dụng các Connecting objecs. Có ba loại Connecting objects là 
Sequence flow, Message flow, và Associations 
Loại Biểu diễn Ý nghĩa 
Sequence 
flow 
Biểu diễn thứ tự thực hiện của Activities trong quy 
trình nghiệp vụ 
Message 
flow 
Thể hiện các bản tin đang trao đổi trong quy trình 
Associations 
Biểu diễn mối quan hệ giữa Flow object và Artifacts 
hoặc dữ liệu trong quy trình nghiệp vụ 
Swim lanes 
Được sử dụng cho mục đích hiển thị hóa. Nhờ có Swim lanes mà có thể dễ dàng 
tổ chức các Activites của một nghiệp vụ. Swim lanes bao gồm 2 đối tượng là Pool và 
Lanes 
Loại Biểu diễn Ý nghĩa 
Pool 
Đại diện cho một thực thể trong quy trình nghiệp 
vụ. Pool có thể chứ một vài Lanes. Khi làm việc 
trong Pool, chúng ta không thể kết nối với các 
Activities bên ngoài Pool 
Lanes 
Một phân vùng của Pool, được sử dụng để tổ 
chức quy trình nghiệp vụ theo các vai trò hoặc 
chức năng đang thực hiện 
17 
Artifacts 
Được sử dụng để cung cấp thông tin bổ sung trong sơ đồ BPMN, việc sử dụng 
các ký hiệu trong quy trình nghiệp vụ có thể chú thích rõ ràng và mọi người cùng hiểu 
được. Có ba loại Artifacts là Data object, Group và Anotation 
Loại Biểu diễn Ý nghĩa 
Data object 
Hữu ích cho việc xem thông tin liên quan đến dữ liệu 
được yêu cầu trong Activity 
Group 
Nhóm các Activities hoặc các Node cùng loại hay 
cùng mục đích lại với nhau 
Anotation 
Thêm một số nhận xét, chú thích vào quy trình 
1.4.2. Công cụ Activiti 
 Activiti được phát triển bởi Tom Baeyens và Joram Barez [11] dưới dạng mã 
nguồn mở, để thực thi các quy trình nghiệp vụ được biểu diễn bằng BPMN 2.0. Activti 
là nền tảng tốt nhất để xây dựng BPM cho giao tiếp giữa con người với con người. Nó 
có thể được sử dụng rất dễ dàng trong mọi môi trường Java, hỗ trợ tất cả các khía cạnh 
của BPM trong ngữ cảnh phát triển phần mềm. Người dùng có thể xây dựng bất kì 
ngôn ngữ quy trình tùy chỉnh nào phù hợp với yêu cầu của mình vì nó cho phép họ sử 
dụng các công cụ đã biết thay vì việc thay thế bằng một công cụ hoàn toàn mới. Thậm 
chí, nếu người dùng thiếu kiến thức về kỹ thuật thì họ cũng có thể dễ dàng cài đặt và 
chạy quy trình với tiện ích cài đặt. Activi có một cơ chế xử quy trình BPMN 2.0 siêu 
nhanh và ổn định, cung cấp nền tảng tốt nhất cho sự hợp tác giữa người dùng ít hiểu 
biết về kỹ thuật và nhà phát triển kỹ thuật. 
 Activiti được chia thành các mô-đun khác nhau. Activiti Modeler, Activiti 
Designer, and Activiti Kickstart được sử dụng trong pha mô hình hóa để thiết kế quy 
trình. Activiti Engine được tích hợp với ứng dụng và được đặt tại vị trí trung tâm như 
một phần của pha thực thi. Để giám sát và quản lý quy trình, Activiti Explorer và 
Activiti Rest được sử dụng. 
18 
Hình 1.9: Các thành phần của Activiti 
Activiti Engine 
Activiti Engine là framework bền vững chịu trách nhiệm cho việc triển khai các 
định nghĩa về quy trình, bắt đầu quy trình và thực thi các Task. Một số chức năng quan 
trọng của Activiti Engine là : 
 Thực hiện các Tasks khác nhau của process engine 
 Thực thi nhanh chóng 
 Dễ dàng tích hợp với các công nghệ khác 
 Dễ dàng truy vấn thông tin lịch sử 
 Hỗ trợ thực thi không đồng bộ 
 Khả năng kiểm tra sự thực thi của quy trình 
 Thực thi workflow sử dụng các services 
 Sử dụng Activiti Engine APIs hoặc REST API để cấu hình process engine. 
Hình 1.10: Các thành phần của Activiti Engine 
19 
Có thể tương tác với Acitivi bằng cách sử dụng các services có sẵn. Process Engine 
được khởi tạo bởi ProcessEngineConfiguration và nó cung cấp một số services sau: 
 RespositoryService: chịu trách nhiệm cho việc lưu trữ và truy suất thông tin về 
quy trình nghiệp vụ từ repository 
 RuntimeService: Được sử dụng để bắt đầu và truyền thông tin về quy trình 
đang thực hiện 
 TaskService: xác định các hoạt động cần thiết để quản lý các tác vụ của con 
người như yêu cầu, hoàn thành và gán tác vụ. 
 IndentityService: Quản lý người dùng, nhóm và quan hệ giữa chúng. 
 ManagementService: Quản lý thông tin về Process Engine, admin và các hoạt 
động duy trì. 
 HistoryService: Cung cấp các service cho việc lấy thông tin về các instance của 
quy trình đã và đang xảy ra. 
 FormService: Cung cấp truy cập tới dữ liệu biểu mẫu (form data) và hiển thị 
các biểu mẫu cho việc bắt đầu các instance quy trình mới và cho việc hoàn 
thành các Tasks 
Activiti Modeler 
Activiti Modeler là một công cụ mô hình hóa mã dùng để quản lý Activiti Server 
và việc triển khai các quy trình nghiệp vụ. Nó được xây dựng trên nền tảng web cho 
phép quản lý các dự án Activiti, hỗ trợ thiết kế biểu mẫu, thay đổi và thiết kế 
workflow của quy trình một cách dễ dàng. 
Activiti Designer 
 Acitivi Designer được sử dụng để thêm các chi tiết kỹ thuật vào mô hình quy 
trình nghiệp vụ hoặc quy trình được tạo ra bởi Activiti Modeler. Activit Designer có 
thể mô hình đồ họa, kiểm thử và triển khai các quy trình BPMN 2.0 giống như Activiti 
Modeler nhưng nó chủ yếu được sử dụng bởi các nhà phát triển để thêm chi tiết kỹ 
thuật vào quy trình. Activiti Designer là một IDE chỉ được tích hợp với Eclipse Plugin. 
Activiti Explorer 
 Activiti Explorer là một ứng dụng dựa trên nền tảng web, có thể truy cập dễ dàng 
bởi người ít hiểu biết về kỹ thuật để chạy quy trình nghiệp vụ. Ngoài ra, nó còn cung 
cấp một giao diện quản lý các instance của quy trình và quản lý người dùng; cho phép 
triển khai quy trình và sinh ra các báo cáo dựa trên dữ liệu lịch sử. 
Activiti REST 
 Activiti REST cung cấp REST API để truy cập vào Activit Engine, cho phép cấu 
hình Activiti trên ứng dụng web. 
20 
1.5. Tổng kết chương 
Chương này đã trình bày các kiến thức nền tảng được sử dụng trong luận văn. 
Đầu tiên, các khái niệm và kiến trúc về mô hình hóa chuyên biệt miền DSM đã được 
giới thiệu. Mục đích của mô hình hóa chuyên biệt là nâng cao mức độ trừu tượng trên 
cả lập trình và tự động hóa việc sinh code để từ đó cải thiện được hiệu suất phát triển 
phần mềm. Tiếp theo, mô hình điều khiển truy nhập dựa trên vai trò cũng được trình 
bày một cách chi tiết từ mô tả các khái niệm RBAC và các ràng buộc phân quyền đến 
xây dựng mô hình metamodel cho RBAC. Cuối cùng, một phần rất quan trọng là mô 
hình hóa quy trình nghiệp vụ. Các công cụ quản lý quy trình nghiệp vụ giúp cho doanh 
nghiệp vận hành các quy trình của họ một cách tự động. Activiti là một công cụ linh 
hoạt, hiệu quả và hoàn toàn miễn phí giúp để mô hình hóa và thực thi các quy trình 
nghiệp vụ. 
Các công cụ mô hình hóa quy trình nghiệp vụ hiện nay đang chỉ tập trung vào mô 
tả chính xác các yêu cầu chức năng của quy trình mà bỏ qua các yêu cầu an ninh. 
Chương tiếp theo của luận văn sẽ trình bày phương pháp tích hợp mô đun chính sách 
truy cập vào BPM nói chung và công cụ Activiti nói riêng. 
21 
CHƯƠNG 2. TÍCH HỢP MÔ ĐUN CHÍNH SÁCH TRUY CẬP RBAC 
VỚI ACTIVITI 
2.1. Giới thiệu chương 
 Ở chương này, các vấn đề an ninh trong quy trình nghiệp vụ sẽ được xem xét 
trước tiên. Từ đó, một phương pháp tích hợp chính sách truy nhập RBAC vào quản lý 
quy trình nghiệp vụ BPM sẽ được giới thiệu để giải quyết vấn đề trên. Cuối cùng, chi 
tiết các bước thực hiện tùy chỉnh mã nguồn Actviti để ứng dụng phương pháp vào việc 
tích hợp thêm mô đun RBAC với Activiti. 
2.2. Phương pháp tích hợp RBAC vào BPM 
 Các yêu cầu an ninh là mối quan tâm lớn trong việc thiết kế, xây dựng và thực thi 
các hệ thống hướng quy trình nói chung và hệ thống BPM nói riêng, tuy nhiên chúng 
thường coi là các yêu cầu phi chức năng. Chức năng của hệ thống và yêu cầu an ninh 
thường không độc lập với nhau nên sự phân chia này khiến cho hệ thống khó đảm bảo 
việc thỏa mãn tất cả các yêu cầu. Vì vậy, cần tích hợp các yêu cầu an ninh vào tất cả 
các pha của vòng đời BPM nghĩa là từ pha thiết kế, mô hình hóa đến pha thực thi đến 
pha giám sát và pha tối ưu. Có rất nhiều các yêu cầu an ninh nhưng trong phạm vi luận 
văn chỉ tập trung vào việc tích hợp các yêu cầu điều khiển dựa theo vai trò RBAC vào 
pha thiết kế và mô hình hóa quy trình bằng BPMN 2.0, ngoài ra, áp đặt các yêu cầu an 
ninh vào pha thực thi. 
 Thiết kế và mô hình hóa quy trình nghiệp vụ thường tập trung vào mô hình hóa 
chính xác chức năng của quy trình mà bỏ qua các yêu cầu về an ninh. Nguyên nhân 
chủ yếu là do thực tế rằng các chuyên gia trong lĩnh vực quy trình nghiệp vụ không 
phải là chuyên gia về an ninh. Các yêu cầu về an ninh thường xuyên được xem xét sau 
khi định nghĩa hệ thống. Cách tiếp cận này dẫn đến các lỗ hổng an ninh và rõ ràng cần 
thiết phải tăng cường nỗ lực an ninh trong các giai đoạn trước phát triển do việc sửa lỗi 
sẽ hiệu quả và tiết kiệm chi phí hơn. Các nghiên cứu thực nghiệm cho thấy tại mức 
thiết kế quy trình nghiệp vụ thì khách hàng và người dùng cuối có thể biểu diễn các 
yêu cầu an ninh của họ và sau đó có thể thể hiện tại mức cao, các yêu cầu an ninh dễ 
dàng xác định bởi người mô hình hóa quy trình nghiệp vụ [2]. 
 Để biểu diễn các yêu cầu an ninh trong mô hình hóa quy trình nghiệp vụ, cần một 
tiêu chuẩn kí hiệu có các khái niệm đồ họa cho phép biểu diễn ngữ nghĩa các yêu cầu 
an ninh. BPMN không có cơ chế biểu diễn các yêu cầu an ninh một cách tường minh. 
Tuy nhiên, trong tập các ký hiệu được sử dụng cho sơ đồ quy trình nghiệp vụ thì 
Artifacts có thể được sử dụng để biểu diễn các yêu cầu an ninh do Artifacts được thiết 
kế để mở rộng ký hiệu mô hình hóa cơ bản bằng việc thêm vào chúng khả năng biểu 
diễn các tình huống cụ thể. Artifacts bao gồm DataObjects cho phép chứa dữ liệu được 
22 
yêu cầu hoặc được tạo ra bởi Activities; và Text Annotations cho phép cung cấp thông 
tin bổ sung cho việc hiểu sơ đồ quy trình. Mặc dù Artifacts có thể được sử dụng để thể 
hiện các yêu cầu an ninh nhưng chủ yếu là thông qua Text Annotations, điều này chỉ 
giúp cho các chuyên gia quy trình và chuyên gia an ninh biểu diễn các yêu cầu đó còn 
rất khó cho các nhà phát triển hệ thống có thể cài đặt và triển khai được các yêu cầu an 
ninh trong quy trình. Cách tốt nhất là định nghĩa một cách tường minh các yêu cầu an 
ninh phải là một phần quy trình nghiệp vụ giống như Activity hay Event. Điều này 
chính là mở rộng ngôn ngữ mô hình hóa quy trình BPMN cho việc tích hợp thêm các 
khái niệm về an ninh. Mô hình các thành phần an ninh có thể có trong quy trình nghiệp 
vụ theo hình 2.1. 
Hình 2.1: Yêu cầu an ninh kết hợp với ký hiệu 
Các yêu cầu an ninh được xem xét là chống thoái thác (No Repudiation), phát 
hiện tấn công và tác hại của tấn công (Attack Harm Detection), tính toàn vẹn 
(Integrity), tính bí mật (Privacy) và kiểm soát truy cập (Access Control). Trong đó, 
tính bí mật và kiểm soát truy cập kết hợp với Security Role, Security Permission được 
kết hợp với Security Role. 
 Chống thoái thác: được xác định trên Message Flow, thể hiện giao dịch không 
thể bị phủ nhận. 
 Phát hiện tác hại của tấn công: tất cả các thành phần trong sơ đồ BPM phải xem 
xét một cơ chế cho phép phát hiện, đăng kí và thông báo về cuộc tấn công 
mạng. 
 Tính toàn vẹn: phải đảm bảo dữ liệu được bảo vệ, tránh sự gián đoạn và mất 
mát nội dung. 
 Tính bí mật: phải xem xét một cơ chế tránh các lộ lọt thông trái phép. 
 Kiểm soát truy nhập: tránh sự truy nhập trái phép vào các thành phần sơ đồ 
BPMN như UserTask, MessageTask, 
 Tất cả các yêu này hoàn toàn có thể thêm vào sơ đồ BPMN . Tuy nhiên, trong 
phạm vi luận văn, tôi chỉ tập trung vào việc đặc tả và cài đặt các chính sách truy cập 
RBAC vào BPM. Các yêu cầu về kiểm soát truy nhập bao gồm Acess Control (chính 
23 
là Core RBAC) và hai ràng buộc phân quyền Authorization Contraints là 
SeparationOfDuty và BindingOfDuty sẽ được đưa xem xét và bổ sung vào metamodel 
của BPMN để thu được metamodel mở rộng của BPMN tích hợp với các yêu cầu an 
ninh RBAC hình 2.2. 
Hình 2.2: Metamodel của BPMN tích hợp với một số chính sách an ninh 
 Acess Control: Truy nhập hay thực hiện các hành động trên các nguồn tài nguyên 
cần được giới hạn cho các vai trò nhất định. Trong sơ đồ BPMN, Acess Control 
được yêu cầu trên Pool, Lane, Activity. Acess Control chứa các thành phần Core 
RBAC: Role, Permission, Action 
 Separation of Duty: Một người không được phép thực hiện nhiều vai trò trong quy 
trình. SoD bao gồm nhiều Permission mà nó ràng buộc. 
 Binding of Duty: Cùng một người phải thực hiện một số vai trò trong quy trình. 
BoD cũng bao gồm nhiều Permission mà nó ràng buộc. 
 Security Flow : thuộc thành phần Connecting Element, dùng để kết nối các đối 
tượng cần ràng buộc chính sách truy cập RBAC với nhau. 
Sau khi các yêu cầu an ninh được tích hợp vào BPMN 2.0 cần thực thi các chính an 
ninh trong pha triển khai quy trình. Các hệ thống hiện đại thường chứa một tập các 
dịch vụ, cần ràng buộc các yêu cầu an ninh trên mỗi dịch vụ và bản thân việc kiểm tra 
các yêu cầu an ninh cũng là một dịch vụ được gọi bởi các dịch vụ khác. Áp dụng kiến 
trúc hướng dịch vụ SOA, xây dựng một webservice phục vụ việc kiểm tra các yêu cầu 
an ninh. Trước khi thực hiện bất kì hành động nào trên nguồn tài nguyên được bảo vệ, 
hệ thống phải gọi đến webservice này để kiểm tra xem hành động đó có hợp lệ hay 
không. Webservice có thể sử dụng các thông tin được cung cấp như Role, Permission, 
Action và các thông tin hệ thống sẵn có để kiểm tra. Trường hợp, với hệ thống lớn, các 
chính sách an ninh phức tạp phải sử dụng các công cụ hỗ trợ việc kiểm tra. Ví dụ, các 
24 
yêu cầu SoD và BoD của RBAC có thể tự động chuyển thành các chính sách XACML 
và được ép buộc thực thi bởi một hoặc một vài điểm PEP [12]. Kết quả cuối cùng 
được trả về cho hệ thống là hành động đó được thực hiện hay không được thực hiện và 
hiển thị thông báo trả về cho người dùng. 
Trong luận văn, việc thực thi các chính sách an ninh chỉ dừng lại ở việc kiểm tra 
các trường hợp đơn giản như một người dùng được gán các vai trò không kế thừa và 
việc kiểm tra được thực hiện tại chỗ không gọi đến các webservice được cung cấp bởi 
bên thứ ba. Khi hệ thống lớn lên, các yêu cầu an ninh cũng trở nên phức tạp, cần có có 
các công cụ hỗ trợ vừa đảm bảo việc kiểm tra tính đúng đắn, tính toàn vẹn của các yêu 
cầu an ninh trong BPM vừa trả về kết quả nhanh nhất. 
2.3. Tích hợp RBAC vào Activiti BPM 
 Ở phần này, đầu tiên một số khái niệm liên quan đến nền tảng phát triển Activiti 
được giới thiệu. Sau đó, phương pháp tích hợp chính sách an ninh vào quy trình 
nghiệp vụ được sử dụng để mở rộng công cụ Activiti BPM. Cụ thể, mở rộng Activiti 
Designer cung cấp một môi trường tích hợp cho việc mô hình hóa các yêu cầu an ninh 
cho quy trình nghiệp vụ ngay ở bước thiết kế và mở rộng Activiti Explorer cho việc 
thực thi các quy trình đó. 
2.3.1. Một số khái niệm 
2.3.1.1. Data models và Eclipse EMF 
 Mô hình dữ liệu (data model) là một mô hình miền được dùng để biểu diễn dữ 
liệu mà ta muốn làm việc với. Ví dụ: nếu phát triển một ứng dụng đặt chỗ trực tuyến, 
mô hình miền có thể được mô hình hóa với đối tượng như “Person, Fight, 
Booking”. Eclipse Modeling Framework (EMF) là một nền tảng giúp cho việc định 
nghĩa tường mình mô hình miền và khả năng hiển thị mô hình một cách trực quan. Bộ 
sinh code cho các mô hình EMF có thể được điều chỉnh hoặc sử dụng cấu hình mặc 
định. EMF sinh ra các lớp interfaces và một lớp factory phục vụ việc tạo ra các đối 
tượng, bởi vậy giúp cho ứng dụng không cần phải có các lớp cài đặt cụ thể. Một ưu 
điểm nữa là code Java có thể được sinh ra từ mô hình tại bất kì thời điểm nào [13]. 
 Eclipse Modeling Framework là một tập các Eclipse plug-ins được sử dụng để 
mô hình hóa một mô hình dữ liệu để sinh ra code hoặc các đầu ra khác dựa vào mô 
hình đó. EMF có sự khác biệt giữa metamodel và mô hình thực sự. Metamodel mô tả 
cấu trúc của mô hình. Một mô hình là một thể hiện cụ thể của metamodel này. EMF 
cho phép nhà phát triển tạo metamodel thông qua các phương tiện khác nhau như 
XMI, Java annotations, UML hoặc lược đồ XML. 
25 
 Sinh dữ liệu từ EMF model: thông tin lưu trữ trong EMF model có thể được sử 
dụng để sinh ra các đầu ra. Cụ thể ở đây là sử dụng EMF định nghĩa mô hình miền của 
ứng dụng và sinh các lớp Java tương ứng từ mô hình. EMF hỗ trợ code sinh ra có thể 
được chỉnh sửa nếu cần thiết. EMF model gồm 2 file mô tả là ecore và genmodel. 
 Ecore file chứa thông tin về các lớp đã định nghĩa. Ecore file định nghĩa các thành 
phần sau: 
 EClass: biểu diễn một lớp, chứa không hoặc một vài thuộc tính cũng như 
các tham chiếu. 
 EAttribute: biểu diễn một thuộc tính với tên và loại thuộc tính. 
 EReference: biểu diễn một association giữa hai lớp. 
 EDataType: biểu diễn một loại dữ liệu của thuộc tính như kiểu int, string,.. 
 Genmodel file chứa thông tin bổ sung cho việc sinh code như thông tin về file và 
đường dẫn. Genmodel file cũng chứa các tham số cấu hình việc code được sinh ra 
như thế nào. 
Eclipse EMF là một nền tảng mô hình hóa và cơ sở sinh code cho việc xây dựng các 
công cụ và các ứng dụng dựa trên mô hình dữ liệu có cấu trúc. 
2.3.1.2. Eclipse Plug-in 
 Eclipse là một môi trường phát triển Java và cũng là một nền tảng tích hợp công 
cụ được phát triển dưới dạng mã nguồn mở. Eclipse sẽ giúp tự động hóa các hoạt động 
tốn thời gian và cung cấp các công cụ sinh, chỉnh sửa và định vị mã nguồn Java. Tuy 
nhiên, Eclipse không chỉ là một môi trường phát triển tích hợp (IDE) [14]. Mục đích 
của nền tảng tích hợp công cụ Eclipse là tích hợp tất cả các công cụ hiện có của các 
nhà phát triển lại với nhau. Để thực hiện điều này, Eclipse chứa một nền tảng plug-in 
phức tạp cho phép các công cụ khác tích hợp liền mạch vào môi trường Eclipse dưới 
dạng các Plug-in. Plug-in đơn giản chỉ là một chương trình Java khác mở rộng chức 
năng của Eclipse theo một cách nào đó. Mỗi Eclipse plug-in có thể sử dụng các dịch 
vụ được cung cấp bởi các plug-in khác hoặc có thể mở rộng tính năng của nó để được 
sử dụng bởi các plug-in khác. Các plug-in đó được tải một cách tự động bởi Eclipse tại 
thời điểm run-time. 
 Plug-in Development Environment (PDE) cung cấp các công cụ để tạo, phát 
triển, kiểm thử, debug, build và triển khai các Eclipse Plug-in. Các thành phần của 
PDE bao gồm : 
 PDE Build: các công cụ và kịch bản Ant để tự động hóa các quá trình build 
26 
 PDE UI: Các models, builders, editors và các tiện ích khác hỗ trợ phát triển plug-in 
trong Eclipse IDE 
 PDE API Tools: công cụ tích hợp với Eclipse IDE và quá trình build để duy trì API 
 PDE Incubator: phát triển các công cụ mới nhưng chưa sẵn sàng tích hợp vào 
Eclipse SDK 
2.3.2. Mô hình hóa các chính sách truy nhập RBAC 
 Các bước để tích hợp RBAC vào mô-đun thiết kế của Activiti bao gồm: 
 Bước 1: Sử dụng Eclipse EMF để mô hình hóa mô hình miền metamodel của 
RBAC. Sau khi EMF metamodel của RBAC được xây dựng, Eclipse EMF cho 
phép tự động sinh ra các lớp Java từ mô hình này. Bước này được thực hiện ở mô-
đun “org.activiti.designer.model”. 
 Bước 2: Sử dụng các lớp Java được sinh ra từ mô hình để xây dựng các mô tả 
RBAC cho quy trình. 
 Bước 3: Các lớp Java mô tả RBAC của quy trình cần được export dưới định dạng 
.xml cho phép triển khai trên Activiti Explorer 
2.3.2.1. Xây dựng mô hình dữ liệu RBAC sử dụng Eclipse EMF 
 Tạo Ecore diagram : Mở mô-đun “org.activiti.designer.model”, chọn Folder 
“model” trong cửa sổ Package Explore > New/Other/ Ecore Tools/Ecore 
Diagram > đặt tên cho Ecore diagram là SecureBPMN20 
 Kéo thả các concept (Class, attribute, reference,..) từ Palette vào Visual Editor để 
xây dựng metamodel RBAC 
Hình 2.3: Ecore Diagram của RBAC trong Eclipse 
27 
 Mô hình Ecore tương ứng thu được từ ecorediagram 
Hình 2.4: Mô hình Ecore của RBAC thu được từ EcoreDiagram 
 Tạo EMF Generator Model: mã nguồn Activiti đã tạo ra file bpmn20.genmodel nên 
chỉ cần Reload dữ liệu là đủ. Chuột phải bpmn20.genmodel > Reload> chọn 
Ecore model > chọn tất cả các package xuất hiện > finish 
 Sinh code Java sau khi tạo được hai mô hình .ecore và .genmodel. Chuột phải nút 
gốc bpmn2 > Generate all. 
Hình 2.5: Lớp JAVA được sinh ra từ mô hình 
2.3.2.2. Xây dựng mô tả RBAC trong quy trình 
Mô-đun “activiti-engine” của Activiti thực hiện nhiệm vụ xây dựng các mô tả 
RBAC trong quy trình nghiệp vụ. Bao gồm hai phần : một là các ký tự và ngữ nghĩa 
của các chính sách RBAC trong tab Security của Patelle; hai là các thuộc tính RBAC 
trong tab Security của Properties. 
28 
 Xây dựng ký tự và ngữ nghĩa cho RBAC trong tab Security của Patelle: 
Hình 2.6: Tab Security trong Patette 
Tạo tab Security trong mô-đun “org.activiti.designer.gui” chứa hai component 
BindingOfDuty và SeparationOfDuty. Tương ứng khi kéo thả hai component này 
vào Visual Editor tạo ra các component của Eclipse được thiết kế có dạng hình 
vuông, màu xanh nước biển, có icon và text thể hiện ý nghĩa của chúng : . 
Để làm được điều này cần thực hiện các bước sau: 
 Bước 1: Tạo 2 lớp AddSecuritySodFeature và AddSecuritySodFeature chứa 
mô về hình dạng, kích thước của SoD và BoD khi được kéo thả vào Visual 
Editor. 
 Bước 2: Tạo 2 lớp CreateSecurityBodFeature và CreateSecuritySodFeature 
chứa mô tả thuộc tính của SoD và BoD như tên, Id, icon... Khi người dùng kéo 
thả icon của nó trên Patelle, các lớp tương ứng sẽ tự động tạo ra các đối tượng 
BindingOfDuty và SeparationOfDuty chứa thông tin mặc định : 
 Bước 3: Tạo tab Security và các component của nó. 
 Xây dựng các thuộc tính RBAC trong tab Security của Properties: 
Hình 2.7: Tab Security trong Properties 
29 
 Được thực hiện bằng cách khai báo thêm propertyTab và propertySection trong 
file plugin.xml : 
 <extension 
 point="org.eclipse.ui.views.properties.tabbed.propertyTabs"> 
 <propertyTabs 
 ... 
 <propertyTab 
 afterTab="org.activiti.designer.mainConfigTab" 
 category="Activiti" 
 id="org.activiti.designer.securityTab" 
 label="Security"> 
 <extension 
 point="org.eclipse.ui.views.properties.tabbed.propertySections"> 
 ... 
<propertySection 
 class="org.activiti.designer.security.property.PropertyRbacSection" 
 filter="org.activiti.designer.security.property.PropertyRbacFilter" 
 id="org.activiti.designer.securityTab.usertask" 
 tab="org.activiti.designer.securityTab"> 
<propertySection 
 class="org.activiti.designer.security.property.PropertySodBoDSection" 
 filter="org.activiti.designer.security.property.PropertySodBoDFilter" 
 id="org.activiti.designer.securityTab.sodbod" 
 tab="org.activiti.designer.securityTab"> 
 ... 
 Trong đó, lớp PropertyXXXSection được dùng để mô tả các thuộc tính còn lớp 
PropertyXXXFilter được dùng lọc các component nào sẽ có các thuộc tính đó. Cụ 
thể nếu component là UserTask thì PropertyRbacSection sẽ được dùng để hiển thị 
tab Security còn nếu component là SoD/BoD thì PropertySodBoDSection sẽ thực 
hiện nhiệm vụ này. 
2.3.2.3. Lưu mô tả RBAC dưới dạng xml 
 Mô-đun “org.activiti.designer.export.bpmn20” của Activiti thực hiện nhiệm vụ 
lưu toàn bộ mô tả về quy trình dưới dạng các lớp Java sang định dạng xml. Bao gồm 
export các thuộc tính RBAC trong tab Security của Properties và export mô tả hình 
dạng, vị trí, kích thước các component Security trong Palette. 
30 
 Export các thuộc tính Security trong tab Security của Properties được mô tả bởi các 
lớp Java sinh ra từ mô hình: 
 ... 
<seperationOfDuty id="Sod1" name="sod" outgoingSecurityFlow="sf1 sf2 " 
permissions="permission_id_1 permission_id_2 dynamicEnforcement="false"> 
<pemission id="permission_id_1" pName="Perm-usertask1-Full Access" 
roles="role_id_1" actions="action_id_1"> 
<atomicActivityAction id="action_id_1" actionName="Full Access" 
activityId="usertask2" permissions=" permission_id_1" > 
<pemission id=" permission_id_2" pName="Perm-usertask2-Full Access" 
roles="role_id_2" actions="action_id_2"> 
 ... 
Mỗi đối tượng thuộc lớp đó chứa các thuộc tính và giá trị được cấu hình được biểu 
diễn tương ứng dưới dạng xml là . Ví dụ, lớp 
Permission chứa thuộc tính tên permission, danh sách các role và action gán cho nó: 
public interface Permission extends BaseElement { 
 List getRoles(); 
 List getActions(); 
 List getAuthorizationConstraints(); 
 String getPName(); 
 void setPName(String value); 
} // Permission 
Permission sẽ được lưu dưới dạng xml : 
<pemission id="permission_id_1" pName="Perm-usertask1-Full Access" 
roles="role_id_1" actions="action_id_1"> 
Không phải tất cả các thông tin trong Permission đều được export. Tùy thuộc vào cơ 
chế khôi phục quy trình từ mô tả xml mà chọn các thông tin cần thiết. Cơ chế lưu mô 
tả quy trình dưới dạng xml là tạo một đối tượng XMLStreamWriter, đọc tất cả các đối 
tượng trong sơ đồ Diagram đã tạo, nếu đối tượng là một thể hiện của lớp Role thì gọi 
hàm createRole của lớp RoleExport còn nếu đối tượng là thể hiện của lớp 
SeparationOfDuty thì gọi hàm createSoDTask của lớp SecuritySoDExport. Tương tự, 
đối với tất cả các đối tượng còn lại. 
31 
Các lớp export sử dụng đối tượng XMLStreamWriter để ghi các thông tin của đối 
tượng cần export thành định dạng xml. Ví dụ, lớp SecuritySoDExport dùng để ghi 
các đối tượng SeparationOfDuty sang xml : 
public class SecuritySoDExport implements ActivitiNamespaceConstants { 
 public static void createSoDTask(EObject object, XMLStreamWriter xtw){ 
 SeparationOfDuty sodTask = (SeparationOfDuty) object; 
 xtw.writeStartElement("seperationOfDuty"); 
 xtw.writeAttribute("id", sodTask.getId()); 
 if (sodTask.getName() != null) { 
 xtw.writeAttribute("name", sodTask.getName()); 
 } 
 if(sodTask.getOutgoingSecurityFlow().size()>0){ 
 String outgoingSecurityFlow =""; 
 for(SecurityFlow a : sodTask.getOutgoingSecurityFlow()){ 
 outgoingSecurityFlow = outgoingSecurityFlow+a.getId()+" "; 
 } 
 xtw.writeAttribute("outgoingSecurityFlow", outgoingSecurityFlow); 
 } 
 if(sodTask.getPermissions() !=null && sodTask.getPermissions().size()>0){ 
 String permissions =""; 
 for(Permission p : sodTask.getPermissions()){ 
 permissions = permissions+p.getId()+" "; 
 } 
 xtw.writeAttribute("permissions", permissions); 
 } 
 } 
 ... 
 xtw.writeEndElement(); 
 } 
} 
 Export mô tả hình dạng, vị trí, kích thước các component Security trong Palette: 
 ... 
 ... 
32 
Hàm writeBpmnElement thực hiện đọc tất cả các đối tượng trong sơ đồ Diagram, nếu 
một đối tượng là thể hiện của SecurityFlowNode thì nó sẽ được lưu các thông tin vị trí, 
kích thước trong tag xml “SecurityShape” : 
private static void writeBpmnElement(FlowNode flowNode, ContainerShape parent){ 
 ILinkService linkService = Graphiti.getLinkService(); 
 ... 
 for (Shape shape : parent.getChildren()) { 
 EObject shapeBO = linkService.getBusinessObjectForLinkedPictogramElement(); 
 if (shapeBO instanceof FlowNode) { 
 FlowNode shapeFlowNode = (FlowNode) shapeBO; 
 if (shapeFlowNode.getId().equals(flowNode.getId())) { 
 if(shapeFlowNode instanceof SecurityFlowNode){ 
 xtw.writeStartElement(BPMNDI_PREFIX, "SecurityShape", BPMNDI_NAMESPACE); 
 xtw.writeAttribute("securityElement", flowNode.getId()); 
 xtw.writeAttribute("id", "SecurityShape_" + flowNode.getId()); 
 }else{ 
 xtw.writeStartElement(BPMNDI_PREFIX, "BPMNShape", BPMNDI_NAMESPACE); 
 xtw.writeAttribute("bpmnElement", flowNode.getId()); 
 xtw.writeAttribute("id", "BPMNShape_" + flowNode.getId()); 
 } 
 xtw.writeStartElement(OMGDC_PREFIX, "Bounds", OMGDC_NAMESPACE); 
 xtw.writeAttribute("height", shape.getGraphicsAlgorithm().getHeight()); 
 xtw.writeAttribute("width", shape.getGraphicsAlgorithm().getWidth()); 
 xtw.writeEndElement(); 
 ... 
 xtw.writeEndElement(); 
 } 
 } 
 } 
Sau khi bước này hoàn thành thì toàn bộ các mô tả về quy trình cũng như chính sách 
truy cập RBAC đều được lưu dưới dạng xml, sẵn sàng cho việc triển khai quy trình 
trên Activiti Explorer. 
2.3.3. Thực thi các chính sách truy nhập RBAC 
Các bước để tích hợp RBAC vào mô-đun quản lý của Activiti phục vụ cho việc 
thực thi các chính sách truy cập RBAC bao gồm: 
 Bước 1: “activiti-engine” phải cung cấp các chức năng khôi phục mô tả RBAC của 
quy trình từ fie xlml. Lớp BpmnParse thực hiện nhiệm vụ này: 
 Bước 2: Trong quá trình quy trình được chạy, các chính sách truy nhập RBAC phải 
được kiểm tra. SoD và BoD được kiểm tra khi người thực hiện UserTask được 
chọn để gán. Đầu tiên, hệ thống sẽ liệt kê tất cả người dùng có quyền thực hiện task 
này. Sau khi lựa chọn, hệ thống sẽ kiểm tra xem người dùng có thỏa mãn ràng buộc 
SoD hay BoD hay không bằng cách kiểm tra người đó có nằm trong danh sách 
33 
người dùng có quyền thực hiện các task tiếp theo. Ví dụ, UserTaskA và UserTaskB 
bị ràng buộc SoD, khi gán người thực hiện UserTaskA hệ thống cũng sẽ liệt kê tất 
cả người có quyền thực hiện UserTaskB; nếu người được chọn thực hiện 
UserTaskA cũng nằm trong danh sách thực hiện UserTaskB thì sẽ vi phạm SoD và 
hệ thống hiển thị thông báo lỗi: không cho phép người dùng đó được thực Task. 
Hàm checkSoD trong lớp ReassignAssigneeListener thực hiện nhiệm vụ này: 
public class ReassignAssigneeListener implements ClickListener { 
... 
 private boolean checkSoD(String selectedUser) { 
 boolean result = false; 
 ... 
 List acs = new ArrayList(); 
 for (Entry entry : securityList.entrySet()){ 
 Map> permissions = entry.getValue().getSod(); 
 if (permissions.containsKey(task.getTaskDefinitionKey())) { 
 acs.add(entry.getValue()); 
 } 
 } 
List roles = new ArrayList(); 
 for (AuthorizationConstraint ac : acs) { 
 if (ac.getType().equals(AuthorizationConstraint.SoD)) { 
 ac.getSod().remove(task.getTaskDefinitionKey()); 
 for (Entry> entry : ac.getSod().entrySet()) { 
 for (Permission p : entry.getValue()) { 
 if (p.getAction().equals(Permission.PERMISSION_FULL_ACCESS)){ 
 roles.add(p.getRole()); 
 }}}} 
List users = new ArrayList(); 
 for (String role : roles) { 
 List usersTmp = ProcessEngines.getDefaultProcessEngine() 
 .getIdentityService().createUserQuery().memberOfGroup(role).list(); 
 users.addAll(usersTmp); 
 } 
 for (User u : users) { 
 if (selectedUser.equals(u.getId())) { 
 result = true; 
 } 
 } 
 return result; 
} 
 ... 
} 
2.4. Tổng kết chương 
Điểm cần nhấn mạnh ở chương này là đã có nhiều phương pháp tích hợp chính 
sách an ninh vào BPM và phương pháp sử dụng trong luận văn là một phương pháp 
đơn giản và hiệu quả nhất [3]. Hiện nay, các công cụ hỗ trợ quản lý quy trình nghiệp 
vụ như Oracle BPM, Activiti BPM hầu hết chỉ mới dừng lại hỗ trợ quản lý người 
34 
dùng, nhóm người dùng và phân quyền cho người dùng – có thể coi là một chức năng 
của công cụ. Điều này khác hoàn toàn với phương pháp tích hợp chính sách an ninh 
vào BPM ở chỗ các yêu cầu an ninh sẽ được mô hình hóa ngay tại pha thiết kế và được 
thực thi tại pha triển khai quy trình. 
Sau khi tích hợp mô đun chính sách truy nhập RBAC vào Activiti, hứa hẹn mang 
lại một công cụ mã nguồn mở, hoàn toàn miễn phí đáp ứng cả các yêu cầu chức năng 
cũng như các yêu cầu về an ninh trong quản lý và vận hành quy trình nghiệp vụ của 
doanh nghiệp. Ở chương tiếp theo, công cụ Activiti mới được tích hợp RBAC sẽ được 
cài đặt và chạy thử trong môi trường thực nghiệm. 
35 
CHƯƠNG 3. CÀI ĐẶT VÀ THỰC NGHIỆM 
3.1. Giới thiệu chương 
 Mục tiêu chính của chương này là triển khai kết quả của luận văn vào việc quản 
lý và vận hành các quy trình nghiệp vụ thực tế tại doanh nghiệp. Từ đó, chứng minh 
tính hữu ích và khả năng hoàn toàn áp dụng được nghiên cứu vào thực tiễn. Nội dung 
chính của chương bao gồm đưa ra một bài toán thực tế đang diễn ra tại doanh nghiệp, 
các bước cài đặt quy trình trên Activiti để giải quyết bài toán và cuối cùng, kết quả 
thực nghiệm được thể hiện dưới các số liệu thống kê hoạt động của quy trình. 
3.2. Bài toán vận tải 
Trung tâm Tư vấn Thiết kế Mobifone – Chi nhánh Tổng Công ty Viễn thông 
Mobifone là đơn vị trực thuộc Tổng Công ty Viễn thông Mobifone, tiền thân là Xí 
nghiệp thiết kế - Công ty Thông tin Di động. Chức năng của trung tâm là thực hiện 
thiết kế kiến trúc công trình; tư vấn khảo sát, thiết kế mạng công trình thông tin, bưu 
chính viễn thông; tư vấn đầu tư xây dựng chuyên ngành bưu chính viễn thông; lắp đặt 
thiết bị công trình, lắp đặt thiết bị công nghệ, giám sát thi công xây dựng các dự án, 
phương án, công trình cho các đơn vị trực thuộc Tổng Công ty Viễn thông Mobifone. 
Cơ cấu tổ chức của trung tâm gồm có 01 Giám đốc, 01 Phó Giám đốc, và 5 đơn vị - 
mỗi đơn vị có 1 trưởng phòng và các nhân viên. 
Hình 3.1: Cơ cấu tổ chức trung tâm Tư vấn Thiết kế 
 Hiện tại, trong trung tâm đang thực thi rất nhiều quy trình nghiệp vụ, tuy nhiên, 
hầu hết các quy trình được thực hiện một cách thủ công và không hiệu quả dẫn đến 
36 
việc quản lý trở nên khó khăn, thủ tục rườm rà, gây lãng phí tiền bạc và công sức. Yêu 
cầu cần có một công cụ tự động quá quy trình nghiệp vụ tại trung tâm. Với ưu điểm là 
đơn giản, triển khai nhanh chóng, Activiti BPM là lựa chọn phù hợp. Được sự cho 
phép của lãnh đạo trung tâm, tôi đã triển khai thử nghiệm hai quy trình là quy trình 
điều xe và quy trình đặt văn phòng phẩm. Trong phạm vi luận văn, tôi xin trình bày chi 
tiết việc triển khai quy trình điều xe. 
Mô tả quy trình điều xe đang được thực hiện như sau: 
 Khi nhân viên có yêu cầu đặt xe, nhân viên làm giấy yêu cầu xin xe có chữ ký của 
người quản lý (trưởng phòng). Nếu trưởng phòng/giám đốc có yêu cầu đặt xe thì 
không cần chữ ký này. 
 Yêu cầu được chuyển sang nhân viên phòng tổng hợp để trình và chờ trưởng phòng 
tổng hợp điều xe. 
 Trưởng phòng tổng hợp sẽ xem xét và chỉ định xe 
 Nhân viên phòng tổng hợp gọi điện cho lái xe thông báo về thời gian điều xe. 
3.3. Cài đặt trên Activiti 
Các bước cài đặt và triển khai một quy trình trên Activiti bao gồm: 
 Bước 1: Cài đặt Activiti BPM trên server 
 Bước 2: Mô hình hóa quy trình trên Activiti Designer 
 Bước 3: Triển khai quy trình trên Activiti Explorer 
3.3.1. Cài đặt Activiti BPM 
Sử dụng hai mô-đun Activiti BPM là Activiti Desginer để mô hình hóa quy trình 
và Activiti Explorer để thực thi quy trình. Trong đó, Activiti Designer là Plugin của 
Eclipse đã được tích hợp chính sách an ninh, có nhiệm vụ tạo ra một tệp .bpmn chứa 
tất cả mô tả về quy trình. Sau đó, tệp .bpmn sẽ được triển khai trên Activiti Explorer – 
một nền tảng web cho phép tự động thực thi quy trình. Các bước cài đặt Activiti 
Explorer là: 
 Bước 1: Chuẩn bị Tomcat server và tạo một Mysql database tên “activiti” 
 Bước 2: Export module activiti-webapp-explorer2.war từ Eclipse 
 Bước 3: Triển khai Activiti Explorer trên Tomcat server bằng cách copy file 
activiti-webapp-explorer2.war vào thư mục webapp của Tomcat. 
 Bước 4: Chạy Mysql database và Tomcat server. Truy cập vào địa chỉ 
 . Activiti Explorer yêu cầu 
đăng nhập, user/password mặc định là kermit/kermit: 
37 
Hình 3.2: Màn hình đăng nhập Activiti Designer 
Sau khi đăng nhập thành công, giao diện của Activiti Explorer như sau: 
 Tasks: Tab này quản lý tất cả các chức năng liên quan đến task bao gồm: Inbox 
chứa tất cả các task được gán cho người dùng, các tasks được gán cho nhóm user 
được chứa trong Queued. 
Hình 3.3: Màn hình quản lý Task trên Activiti Designer 
 Processes: Tab này quản lý các quy trình. Cho phép xem quy trình đang được thực 
thi và cung cấp các chức năng cho việc triển khai quy trình. Vì vậy, quy trình được 
phát triển sử dụng công cụ Eclipse có thể được triển khai trong Activiti Explorer 
Hình 3.4: Màn hình quản lý Process trên Activiti Designer 
38 
 Manage: Tab này cung cấp các chức năng cho người quản trị hệ thống có thể quản 
lý databases, quản lý việc triển khai quy trình và công việc, quản lý người dùng và 
nhóm. 
Hình 3.5: Màn hình quản lý cấu hình trên Activiti Designer 
3.3.2. Mô hình hóa quy trình trên Activiti Designer 
Quy trình điều xe trên sẽ được mô hình hóa trên Activiti Designer như sau: 
 Chạy Activiti Desginer trên Eclipse bằng cách chuột phải vào module 
“org.activiti.designer.eclipse” > Run As > Eclipse Appliction. Một giao diện 
Eclipse mới được mở ra. 
 Tạo dự án tên “TVTK_Project” mới : File > New > Others > Activiti Project 
Hình 3.6: Tạo dự án Activti BPM trên Eclipse 
 Tạo Diagram tên “QuyTrinhDieuXe” : chuột phải thư mục diagram chọn File > 
New > Others > Activiti Diagram 
39 
Hình 3.7: Tạo sơ đồ Activiti Diagram trên Eclipse 
 Giao diện mô hình hóa quy trình nghiệp vụ bao gồm Editor, Palette và Properties. 
Trong đó, Palette và Properties đã mở rộng thêm tab “Security” cho việc định 
nghĩa các chính sách an ninh SoD và BoD. 
Hình 3.8: Visual Editor của Activiti 
 Kéo thả các component trong Palette để mô hình hóa quy trình điều xe. Các thuộc 
tính của từng component phải được cung cấp đầy đủ, bao gồm id, form,.. Sử dụng 
SeparationOfDuty và Security Flow để ràng buộc phân quyền đối với trưởng phòng 
và người quản lý điều xe. 
40 
Hình 3.9: Quy trình điều xe trên Activiti Designer 
 Một Form được sử dụng để mô tả phiếu yêu cầu. Để thêm/sửa/xóa các thuộc tính 
cho Form, nhấn chuột vào nút New/Edit/Delete. Activiti chỉ hỗ trợ một số loại dữ 
liệu như boolean, long, string, enum và date. Các thuộc tính này có thể Readable, 
Writeable và Required. Form được cài đặt tại Start Event cho phép bất kỳ người 
dùng vào bắt đầu quy trình sẽ nhìn thấy Form và được yêu cầu điền thông tin. 
Hình 3.10: Khai báo các data objects của quy trình điều xe 
 Định nghĩa một exclusive gateway sau khi người dùng điền thông tin vào Form. Nó 
sẽ kiểm tra chức vụ của người yêu cầu là “Nhân viên” hay “Trưởng phòng”. Có hai 
41 
đầu ra từ gateway, một nếu chức vụ là “Nhân viên” thì yêu cầu phải được chuyển 
đến trưởng phòng; hai nếu chức vụ đã là “Trưởng phòng” thì yêu cầu được chuyển 
trực tiếp đến quản lý điều xe. 
Hình 3.11: Cấu hình rẽ nhánh cho Gateway 
Trường hợp chức vụ là nhân viên, yêu cầu sẽ được chuyển đến task Manager 
Aproval. Task này được gán cho người dùng hoặc nhóm người dùng có quyền thực 
hiện. Task chỉ thực hiện đồng ý hoặc từ chối yêu cầu nên cần thuộc tính bắt buộc 
result kiểu enum có hai giá trị true và false. Để xem lại thông tin của Form yêu cầu, 
sử dụng id của thuộc tính tại trường Value/Expression. Chú ý, các thuộc tính Form 
yêu cầu chỉ được xem không được sửa nên phải xét trường Writable bằng False. 
Hình 3.12: Cấu hình kết quả phê duyệt của Manager Approval 
42 
 Để thiết lập Permission cho UserTask vào tab Security, chọn Action và Role và ấn 
nút Add. Một Permission được định nghĩa bởi một Action và một Role, một 
UserTask có thể chứa nhiều Permission. 
Hình 3.13: Cấu hình Security cho Manager Approval 
 SoD được dùng để ràng buộc người đã có quyền thực hiện task Manager Approval 
thì không có quyền hiện task Car Supervisor Approval. SoD sử dụng các 
SecurityFlow để xác định các task phải ràng buộc; sau đó,liệt kê tất cả các 
Permission được định nghĩa trong các task và lựa chọn các Permission mà SoD sẽ 
thực hiện. 
43 
Hình 3.14: Cấu hình Separation Of Duty 
 Nếu Manager đã đồng ý yêu cầu thì luồng sẽ chuyển đến Car Supervisor Approval 
- một UserTask, được cấu hình tương tự với Manager Approval. 
Hình 3.15: Cấu hình Form thông tin của CarSupervisor Approval 
 Cuối cùng, dựa vào quyết định của Manager và Car Supervisor mà quy trình sẽ tự 
động gửi thông báo bằng mail cho những người liên quan sử dụng Mail Task. Nếu 
yêu cầu được chấp nhận thì thông báo sẽ được gửi cho cả lái xe và người yêu cầu 
về lịch trình. Còn nếu yêu cầu bị từ chối thì người yêu cầu sẽ nhận được thông báo 
về lý do bị yêu cầu bị từ chối. 
Hình 3.16: Cấu hình MailTask 
44 
3.3.3. Triển khai quy trình trên Activiti Explorer 
Quy trình điều xe trên sẽ được triển khai trên Activiti Designer như sau: 
 Đăng nhập hệ thống dưới vai trò Admin 
 Tạo các nhóm người dùng tương ứng với các vai trò trong quy trình: Staff, 
Manager và Car Supervisor. Vào Manage > Groups > Create Group 
Hình 3.17: Tạo nhóm người dùng trên Activiti Explorer 
 Tạo người dùng và gán cho các nhóm người dùng: Vào Manage > Users > Create 
User 
Hình 3.18: Tạo người dùng trên Activiti Explorer 
 Triển khai quy trình : Manage > Deployments > Upload New và lựa chọn tệp 
QuyTrinhDieuXe.bpmn20.xml đã được mô hình hóa trong Activti Designer. Sau 
đó, quy trình đã sẵn sàng được thực thi. 
45 
Hình 3.19: Triển khai quy trình trên Activit Explorer 
3.4. Kết quả thực nghiệm 
Sau khi triển khai, quy trình sẽ được thực thi như sau: 
 Bất kì người dùng nào trong tổ chức đăng nhập vào hệ thống đều có quyền đều có 
khởi tạo riêng một instance của quy trình cho yêu cầu của mình. Vào Process > 
Process definitions > chọn quy trình > Start process, một Form xuất hiện, người 
dùng cần điền đầy đủ thông tin. 
Hình 3.20: Biểu mẫu thông tin yêu cầu 
46 
 Phê duyệt yêu cầu: Từ thông tin mà người yêu cầu xe cung cấp, hệ thống sẽ kiểm 
tra trường Role, nếu Role là Staff thì yêu cầu sẽ được chuyển cho người có vai trò 
Manager để phê duyệt. Người này đăng nhập hệ thống, vào Tasks > Queued. Do 
task này được gán cho Group nên chưa có một Assignee cụ thể nào được gán, vì 
vậy mọi thông tin trong task đều ẩn. 
Hình 3.21: Màn hình Task Manager Approval 
 Gán người thực hiện quy trình: Khi nhấn Reassign, hệ thống sẽ bắt đầu kiểm tra 
chính sách an ninh của người được gán cho Task. Ở đây, Separation Of Duty được 
dùng để ràng buộc cho Manager và CarSupervisior nên bất kì người dùng nào 
thuộc cả hai nhóm này đều không có quyền thực hiện Task. Nếu user đăng nhập vi 
phạm, thông báo hiện ra : 
Hình 3.22: Thông báo vi phạm chính sách RBAC 
Còn nếu không vi phạm thì người đăng nhập có thể gán lại task cho người khác 
trong cùng nhóm. Cửa sổ hiện lên danh sách người dùng thuộc nhóm. Nếu người 
47 
đăng nhập lại chọn một user vi phạm Separation Of Duty thì thông báo lỗi lại hiện 
ra, còn không thì Task sẽ được gán cho user vừa được chọn. Khi user đó đăng nhập 
thì mọi thông tin trong task đều hiện lên và user có quyền thực hiện Task. 
Hình 3.23: Chọn người thực hiện Task 
Hình 3.24: Thực hiện phê duyệt yêu cầu 
48 
 Gửi thông báo cho các bên liên quan: thực hiện bởi MailTask, cấu hình gửi mail 
được thiết lập trong Activiti Designer, kết quả nhận được là : 
Hình 3.25: Mail thông báo kết quả phê duyệt 
Như vậy, quy trình đã được thực thi công, các chính sách an ninh đã được kiểm tra 
trước khi gán cho người dùng. 
Sau gần 5 tháng thử nghiệm quy trình, kết quả thu được có 22 lần quy trình được 
thực hiện. Phân bố theo các tháng như sau: 
Hình 3.26: Thống kê số lần quy trình được thực hiện theo tháng 
Số liệu trên được lấy trực tiếp từ việc truy vấn cơ sở dữ liệu của Acitivti: 
SELECT MONTH(START_TIME_) Month_ ,COUNT(PROC_INST_ID_) TotalCount 
FROM ACT_HI_PROCINST 
GROUP BY MONTH(START_TIME_) 
ORDER BY month_; 
49 
Tỷ lệ thực hiện thành công của quy trình là 100% chứng tỏ độ ổn định khi triển khai 
quy trình trên Activiti. Nói cách khác, Activiti là một công cụ đơn giản và hiệu quả 
cho việc thực thi các quy trình nghiệp vụ của doanh nghiệp. 
3.5. Tổng kết chương 
 Kết quả của thực nghiệm đã chứng minh công cụ Activiti tích hợp thêm mô đun 
RBAC đã giải quyết được bài toán vận tải nói riêng và các bài toán liên quan đến quy 
trình nghiệp vụ trong doanh nghiệp nói chung. Các yêu cầu an ninh đã được mô hình 
hóa ngay từ ban đầu tại pha thiết kế và từ sơ đồ BPMN cả chuyên gia nghiệp vụ, 
chuyên gia an ninh và chuyên gia hệ thống đều có thể hiểu chung một ngôn ngữ. Việc 
thực thi các chính sách RBAC cũng đã được thực hiện ở pha triển khai, cung cấp các 
thông báo thân thiện với người dùng về các vi phạm chính sách an ninh. Các bước cài 
đặt quy trình trên Activiti khá không quá phức tạp giúp cho một người không hiểu sâu 
về kỹ thuật cũng có thể tự thực hiện được. 
50 
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 
 BPM là một công cụ giúp cho việc quản lý và vận hành doanh nghiệp được hiệu 
quả hơn. Vấn đề an ninh là một trong các vấn đề quan trọng cần phải được xem xét 
trong tất cả các pha của vòng đời BPM và việc cài đặt chính sách an ninh vào BPM là 
thực sự cần thiết. Luận văn đã trình bày phương pháp tích hợp các chính sách truy 
nhập (cụ thể là điều khiển truy nhập theo vai trò RBAC) vào pha mô hình hóa của 
vòng đời BPM bằng mở rộng ngôn ngữ BPMN 2.0 cho các yêu cầu an ninh. Ứng dụng 
phương pháp để mở rộng công cụ Activiti BPM cho việc cài đặt các chính sách an 
ninh. Tại pha mô hình hóa của Activti, xây dựng metamodel cho BPMN tích hợp 
RBAC và sinh ra cú pháp trừu tượng; sau đó, tại pha thực thi quy trình, kiểm tra một 
số chính sách an ninh trước khi phân quyền cho người sử dụng. Kết quả của luận văn 
đã được ứng dụng vào việc xây dựng một số quy trình nghiệp vụ tại Trung tâm Tư vấn 
Thiết kế Mobifone. 
 Tuy nhiên, trong luận văn mới chỉ dừng lại ở bước tích hợp các chính sách an 
ninh vào pha mô hình hóa của BPM và tại pha thực thi, việc kiểm tra tính thỏa mãn 
của các chính sách an ninh khi phân quyền cho người dùng đang dừng lại ở các trường 
hợp đơn giản. Hệ thống lớn lên, các chính sách an ninh ngày càng phức tạp thì việc 
kiểm tra, phát hiện việc vi phạm các ràng buộc lại trở nên nan giải hơn. Ví dụ, trong 
trường hợp, người dùng được gán nhiều quyền, các quyền lại được kế thừa lẫn nhau,... 
Để giảm sự phức tạp của việc quản lý an ninh, cần phải sử dụng các công cụ hỗ trợ 
việc kiểm tra tính đúng đắn, tính toàn vẹn của các yêu cầu an ninh trong BPM. USE 
tool là một công cụ cho phép mô hình hóa phần mềm và kiểm tra tính chính xác của 
các mô tả UML, USE rất đơn giản và hiệu quả cho việc kiểm tra các chính sách an 
ninh. Vì vậy, hướng phát triển tiếp theo của luận văn là sử dụng USE tool cho việc 
thực thi chính sách an ninh của BPM. Hy vọng trong thời gian tới, tôi có thể phát triển 
và hoàn thiện nội dung này. 
 Qua việc thực hiện luận văn, tôi đã thu được rất nhiều kiến thức bổ ý về hệ thống 
quản lý quy trình nghiệp vụ trong doanh nghiệp cũng như kiến thức về các kỹ thuật 
phát triển phần mềm hiện đại. Tuy nhiên, do kiến thức có hạn nên trong luận văn 
không thể tránh khỏi những sai sót, khiếm khuyết, tôi rất mong nhận được sự góp ý 
của quý thầy cô để luận văn được hoàn thiện hơn. 
51 
TÀI LIỆU THAM KHẢO 
Tiếng Việt 
1. Chu Thị Minh Huệ. (2011), “Ngôn ngữ mô hình chuyên biệt miền cho mô hình 
bảo mật RBAC”, Đại học Quốc Gia Hà Nội, Luận văn thạc sĩ trên Thư viện số 
Đại học Quốc Gia Hà Nội. 
Tiếng Anh 
2. Alfonso RODRIGUEZ, Eduardo FERNANDEZ-MEDINA, Marlo PIATTINI. 
(2007) “A BPMN Extension for the Modeling of Security Requirement in 
Business Processes”. 
3. American National Standards Institute Inc.(2004) “Role Based Access 
Control”, ANSI-INCITS 359-2004. 
4. R. Sandhu, E. Coyne, H. Feinstein, C. Youman. (1996) “Role-based access 
control models”, IEEE Computer, vol. 29, no. 2, pp. 38–47. 
5. Achim D.Brucker, Isabelle Hang, Gero Luckemeyer, Raj Ruparel. (2012) 
“SecureBPMN: Modeling and Enforcing Access Control Requirements in 
Business Processes”. 
6. Steven Kelly, Juha-Pekka Tolvanen. (2008), “Domain-Specific Modeling”, 
pp. 1-92. 
7. Tanveer Mustafa, Karsten Sohr, Duc-Hanh Dang, Michael Drouineaud. (2008), 
“Implementing Advanced RBAC Administration Functionality with USE”. 
8. Achim D. Brucker and J¨urgen Doser. (2012),“Metamodel-based UML 
Notations for Domain-specific Languages”. 
9. Marlon Dumas. (2014), “Business Process Management Course - Lecture 1: 
Introduction to BPM”. 
10. Object Management Group. (2011), “Business process model and notation 
(BPMN)”, version 2.0. 
11. Zakir Laliwala. (2014),” Activiti 5.x Business Process Management”. 
12. OASIS. (2005), “eXtensible Access Control Markup Language (XACML)”. 
13. Vogella. (2016), “”, 
Last visit was on 12/4/2018. 
14.Eclipse.(2018), “”, Last visit was on 8/6/2018 
            Các file đính kèm theo tài liệu này:
 luan_van_mo_rong_cong_cu_activiti_cho_dac_ta_va_cai_dat_chin.pdf luan_van_mo_rong_cong_cu_activiti_cho_dac_ta_va_cai_dat_chin.pdf