[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Draft] Draft proposal
Hi,
Sorry that neither Bob (Burt) or I were available for yesterday's call. I
think you'll find the attached fulfills any homework assignments we might
have to propose types :-) The attached has draft IDL and some amount of
text explaination. I've discussed our ideas briefly with Bob Blakley since
the call and he seems to agree that our ideas are complementary, so where
we have divergent concrete proposals on the table, I think 2ab and IBM
agree that they don't represent two views of how to solve the problem... in
fact, although the work was done in isolation, I think it is much the same
thinking and I'd intend to work to resolve any differences we might discover.
A primary difference is that Bob didn't go beyond the operations needed for
access control. I did the administrative/management operations as well.
I'm sure this will generate some discussion. I also tried to take into
account some of the requirments discussion I've overheard in the last few
months and extended the model a little. See what you think.
Unfortunately, both Bob (Burt) and myself will be on an airplane at the
time slotted for the next conference call. I do plan to attend the
submitters meeting at the OMG, but I am willing to look for a time that Bob
Blakley is available for the first meeting or merely drop back to a single
meeting and deal with this all via e-mail.
Happy reading! Both Bob Burt and myself will be on vacation from August
31 to September 8th.. I will then be at COMDEX Enterprise the rest of that
week, so post all your comments to the list and I'll try and look at them
before the OMG meeting... or we can discuss there. I'm not ignoring
them... I'm just trying to sneak in a vacation.
Carol
HRACdraft.PDF
security1.2notes.pdf
//File: DfResourceAccessControl.idl
//
#ifndef _DF_RESOURCE_ACCESS_CONTROL_IDL_
#define _DF_RESOURCE_ACCESS_CONTROL_IDL_
#include <orb.idl>
#include "Security.idl"
#include "SecurityLevel2.idl"
#include "NamingAuthority.idl"
#pragma prefix "omg.org"
module DfResourceAccessControl
{
interface DynamicAttributeEval; // forward
//*********************************************************
// Basic Types
//*********************************************************
typedef SecurityLevel2::CredentialsList CredentialsList;
typedef Security::AttributeList AttributeList;
typedef Security::SecAttribute SecAttribute;
typedef Security::DelegationState DelegationState ;
enum PermissionControlModel {GRANTED_RIGHTS, DENIED_RIGHTS};
typedef sequence<boolean> Booleans;
typedef sequence<octet> ResourceKey;
typedef string ResourceType;
const ResourceType BASECLASS = "BASECLASS"; // NamingAuthority::QualifiedNameStr
const ResourceType SUBCLASSTYPE = "SUBCLASS";
const ResourceType ATOMICTYPE = "ATOMIC";
struct ResourceNameComponent {
string id;
ResourceType kind;
};
typedef sequence<ResourceNameComponent> ResourceName;
struct DynamicAttrInfo {
DynamicAttributeEval evaluator;
ResourceKey key;
AttributeList dyn_attrs;
};
struct ResourceDef {
ResourceNameComponent local_name; // Name & Kind
PermissionControlModel control_model; // Denied or Granted rights
boolean supports_dynattr;
};
//typedef Security::ExtensibleFamily ExtensibleFamily;
//typedef Security::RightsCombinator RightsCombinator;
struct ExtensibleFamily {
unsigned short family_definer;
unsigned short family;
};
enum RightsCombinator {
SecAllRights,
SecAnyRight
};
// extension of Security::Right...
struct Right {
PermissionControlModel control_model;
ExtensibleFamily rights_family;
string right;
};
typedef sequence<Right> RightsList;
typedef TimeBase::IntervalT IntervalT;
typedef sequence<IntervalT> TimeIntervals;
//***************************************************************
// interface ResourceAccessPolicy
//***************************************************************
interface ResourceAccessPolicy{
void add_rights(
in SecAttribute priv_attr,
in DelegationState del_state,
in RightsList rights,
in TimeIntervals deny_times
);
void remove_rights(
in SecAttribute priv_attr,
in DelegationState del_state,
in RightsList rights
);
void replace_rights (
in SecAttribute priv_attr,
in DelegationState del_state,
in RightsList rights,
in TimeIntervals deny_times
);
RightsList get_rights (
in SecAttribute priv_attr,
in DelegationState del_state,
in ExtensibleFamily rights_family
);
};
//******************************************************************
// interface ResourceRepository
//*****************************************************************
interface ResourceRepository {
void create_resource_def (
in ResourceDef resource);
void delete_resource_def (
in ResourceDef resource);
void add_subclass (in ResourceName parent,
in ResourceDef child);
void remove_subclass (in ResourceName parent,
in ResourceName child);
void add_dynattribute_support (
in ResourceName name,
in DynamicAttrInfo dynamic_info,
in AttributeList dyn_attrs);
DynamicAttrInfo get_dynattribute_support(
in ResourceName name);
void set_permission_control (
in ResourceName name,
in PermissionControlModel control_model);
void set_resource_key (
in ResourceName name,
in ResourceKey key);
// The wrapper around RequiredRights functionality
void set_rights(
in string intent,
in ResourceName resource_name,
in RightsList rights,
in RightsCombinator rights_combinator
);
void get_rights(
in string intent,
in ResourceName resource_name,
out RightsList rights,
out RightsCombinator rights_combinator
);
};
//******************************************************************
// interface DynamicAttributeEval
//*****************************************************************
interface DynamicAttributeEval {
boolean has_attribute(
in ResourceKey resource_key,
in CredentialsList existing_credentials,
in SecAttribute dynamic_attr);
Booleans has_attributes(
in ResourceKey resource_key,
in CredentialsList existing_credentials,
in AttributeList dynamic_attrs);
};
//******************************************************************
// interface AccessDecision
//*****************************************************************
interface AccessDecision {
struct AccessDef {
string intent;
ResourceName name;
};
typedef sequence<AccessDef> MultipleAccessDef;
boolean access_allowed(
in string intent,
in ResourceName name,
in CredentialsList credentials);
Booleans multiple_access_allowed(
in MultipleAccessDef requested_access,
in CredentialsList credentials);
};
};
#endif // DfResourceAccessControl
_________________________________________________________
Carol Burt 2AB, Inc.
cburt@2ab.com Integration Architects
205-621-7455 www.2ab.com
Member, OMG Architecture Board OMG Domain Member
-- integrating yesterday's systems with today's technology --