Chương 2 MỞ RỘNG ĐIỀU KHIỂN TRUY CẬP RBAC VỚI LUẬT
2.4 Khiển khai RBAC mở rộng với luật
2.4.4 Biểu diễn và lượng giá luật với cây biểu thức
Có nhiều cách khác nhau để biểu diễn và lượng giá luật, trong luận văn này chúng tôi sử dụng cây biểu thứcđể biểu diễn và lượng giá luật.
.Net Framework cho phép ta biểu diễn và lượng giá một Expression tree khá dễ dàng. Vì thế, ta chỉ cần phân tích file cấu hình để chuyển thành cây biểu thức tương ứng. Việc xây dựng cây biểu thức được thực hiện theo thuật toán đệ quy như sau:
ExpressionBuildExpressionFromConditions(XElementconditionElement) {
Expression result, left, right;
XElement[]parameters:= parameter elements of conditionElement
switch (operator) {
case"equal":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.Equal(left, right);
break;
case"notequal":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.NotEqual(left, right);
break;
case"greaterorequal":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.GreaterThanOrEqual(left, right);
break;
case"lessorequal":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.LessThanOrEqual(left, right);
break;
case"greaterthan":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.GreaterThan(left, right);
break;
case"lessthan":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.LessThan(left, right);
break;
case"and":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.And(left, right);
break;
case"or":
break; case"not": left = BuildExpressionFromParameter(parameters[0]); result = Expression.Not(left); break; case"add": left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.Add(left, right);
break;
case"subtract":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.Subtract(left, right);
break;
case"multiply":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.Multiply(left, right);
break;
case"divide":
left = BuildExpressionFromParameter(parameters[0]); right = BuildExpressionFromParameter(parameters[1]); result = Expression.Divide(left, right);
break; } return result; } ExpressionBuildExpressionFromParameter(XElementparameterElement) {
if(parameterElement has condition elements)
{
conditionElement=get condition element of parameterElement
returnBuildExpressionFromConditions(conditionElement); }
elseif (parameterElement has claim type elements) {
claimTypeElement=get claim type element of parameterElement
returnBuildExpressionFromClaimItem(claimTypeElement); }
elseif (parameterElement has constant elements) {
constantElement=get constant element of parameterElement
returnBuildExpressionFromConstant(constantElement); }
}
Việc xây dựng cây biểu thức được thực hiện bắt đầu từ việc phân tích thẻ
Conditions của luật (cấu trúc mỗi luật được giới thiệu trong mục 2.2) và đi
sâu xuống các nhánh con (thẻ Parameter). Đến mỗi nhánh con, nó có thể lại