Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.86 by tani, Tue Mar 15 04:49:40 2005 UTC revision 1.87 by tani, Tue Mar 15 12:09:39 2005 UTC
# Line 22  Line 22 
22   *   *
23   * $Revision$   * $Revision$
24   * $Log$   * $Log$
25     * Revision 1.87  2005/03/15 12:09:39  tani
26     * deleteItem 削除権限チェックを強化.
27     * グループインデックスに属するアイテムへのアクセス権チェックを強化.
28     *
29   * Revision 1.86  2005/03/15 04:49:40  tani   * Revision 1.86  2005/03/15 04:49:40  tani
30   * ライセンス文を追加.   * ライセンス文を追加.
31   *   *
# Line 3613  result_t getItems( sessionid_t sid, cons Line 3617  result_t getItems( sessionid_t sid, cons
3617      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );
3618      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0
3619      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?
3620        if( uid != session_t::SID_GUEST ) sql+= " AND tgulink.uid=" + unsignedIntToString( uid );
3621      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );
3622      sql+=      " AND tx.uid=" + unsignedIntToString( uid );      sql+=      " AND tx.uid=" + unsignedIntToString( uid );
3623      sql+=    " OR tx.uid IS NULL ";      sql+=    " OR tx.uid IS NULL ";
# Line 3719  unsigned int getItemCount( sessionid_t s Line 3724  unsigned int getItemCount( sessionid_t s
3724      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );
3725      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0
3726      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?
3727        if( uid != session_t::SID_GUEST ) sql+= " AND tgulink.uid=" + unsignedIntToString( uid );
3728      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );
3729      sql+=       " AND tx.uid=" + unsignedIntToString( uid );      sql+=       " AND tx.uid=" + unsignedIntToString( uid );
3730      sql+=    " OR tx.uid IS NULL ";      sql+=    " OR tx.uid IS NULL ";
# Line 3783  result_t dumpItemID(sessionid_t sid, cri Line 3789  result_t dumpItemID(sessionid_t sid, cri
3789      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );      sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );
3790      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0      sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0
3791      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?      sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?
3792        if( uid != session_t::SID_GUEST ) sql+= " AND tgulink.uid=" + unsignedIntToString( uid );
3793      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );
3794      sql+=       " AND tx.uid=" + unsignedIntToString( uid );      sql+=       " AND tx.uid=" + unsignedIntToString( uid );
3795      sql+=    " OR tx.uid IS NULL ";      sql+=    " OR tx.uid IS NULL ";
# Line 3842  result_t dumpItemID(sessionid_t sid, cri Line 3849  result_t dumpItemID(sessionid_t sid, cri
3849  /**  /**
3850   *   *
3851   * アイテム(Basic Information)を更新する.   * アイテム(Basic Information)を更新する.
3852   * Platformユーザ以上の権限が必要.   * 更新にはアイテム作成者かモデレータ権限が必要.
3853   * itemのitem_idを正しくセットすること.   * itemのitem_idを正しくセットすること.
3854   *   *
3855   * @param sid セッションID   * @param sid セッションID
# Line 4045  result_t deleteItem( sessionid_t sid, it Line 4052  result_t deleteItem( sessionid_t sid, it
4052      item_uid = pitem -> getContributorUID();      item_uid = pitem -> getContributorUID();
4053      freeItem( pitem );      freeItem( pitem );
4054            
4055        userid_t sess_uid;
4056        if( sessionID2UID( sid, &sess_uid ) == RES_OK ){
4057            if( sess_uid != item_uid && !isModeratorBySession( sid ) )
4058                return RES_NO_WRITE_ACCESS_RIGHT;//no permissions to delete this item
4059        }else{
4060            return RES_ERROR;
4061        }
4062    
4063      /*      /*
4064        1. delete item from index keywords        1. delete item from index keywords
4065        2. delete item from binders        2. delete item from binders
# Line 4383  result_t getItemIDByIndexID( sessionid_t Line 4398  result_t getItemIDByIndexID( sessionid_t
4398      if( ( ret = sessionID2UID( sid, &uid ) ) != RES_OK ) return ret;      if( ( ret = sessionID2UID( sid, &uid ) ) != RES_OK ) return ret;
4399      sql = "SELECT DISTINCT tlink.item_id AS item_id FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink";      sql = "SELECT DISTINCT tlink.item_id AS item_id FROM " + dbprefix + "_xnpaccount_index_item_link AS tlink";
4400      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id = tx.index_id";      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_index AS tx ON tlink.index_id = tx.index_id";
 //    sql+=       " AND certify_state=" + unsignedIntToString( index::CERTIFIED );  
4401      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id = ti.item_id";      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_item_basic AS ti ON tlink.item_id = ti.item_id";
4402      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_groups_users_link as tgulink ON tx.gid=tgulink.gid";      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_groups_users_link as tgulink ON tx.gid=tgulink.gid";
4403      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_session AS tsess ON tsess.uid=" + unsignedIntToString( uid );      sql+= " LEFT JOIN " + dbprefix + "_xnpaccount_session AS tsess ON tsess.uid=" + unsignedIntToString( uid );
# Line 4393  result_t getItemIDByIndexID( sessionid_t Line 4407  result_t getItemIDByIndexID( sessionid_t
4407      sql+=       " AND certify_state=" + unsignedIntToString( index::CERTIFIED );      sql+=       " AND certify_state=" + unsignedIntToString( index::CERTIFIED );
4408      sql+=    " OR " + string( !public_item_target_user_all( ) ? "1" : "0" );      sql+=    " OR " + string( !public_item_target_user_all( ) ? "1" : "0" );
4409      sql+=       " AND tx.open_level=" + unsignedIntToString( index::OL_PUBLIC ) + " AND tsess.uid IS NOT NULL";      sql+=       " AND tx.open_level=" + unsignedIntToString( index::OL_PUBLIC ) + " AND tsess.uid IS NOT NULL";
4410      sql+=       " AND certify_state=" + unsignedIntToString( index::CERTIFIED );      sql+=       " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );
4411        sql+=          " OR ti.uid=" + unsignedIntToString( uid ) + ")";
4412      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );
4413      sql+=       " AND tx.uid=" + unsignedIntToString( uid );      sql+=       " AND tx.uid=" + unsignedIntToString( uid );
4414      sql+=    " OR " + string( isModerator( sid, uid ) ? "1" : "0" );      sql+=    " OR " + string( isModerator( sid, uid ) ? "1" : "0" );
4415      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_GROUP_ONLY ); //<<      sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_GROUP_ONLY ); //<<
4416      sql+=    " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED ); //<<      sql+=    " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED ); //<<
4417        sql+=          " OR ti.uid=" + unsignedIntToString( uid );
4418      sql+=          string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0      sql+=          string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0
4419      sql+=          " OR tgulink.is_admin=1 )"; //グループ管理者か?      sql+=          " OR tgulink.is_admin=1 )"; //グループ管理者か?
4420        if( uid != session_t::SID_GUEST ) sql+= " AND tgulink.uid=" + unsignedIntToString( uid );
4421      sql+=    " OR tx.uid IS NULL ";      sql+=    " OR tx.uid IS NULL ";
4422      sql+=    " AND tx.open_level=" + unsignedIntToString( index::OL_PUBLIC );      sql+=    " AND tx.open_level=" + unsignedIntToString( index::OL_PUBLIC );
4423      sql+=    " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED ); //<<      sql+=    " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED ); //<<
4424        sql+=          " OR ti.uid=" + unsignedIntToString( uid );
4425      sql+=          string( isModerator( sid, uid ) ? " OR 1 )" : " OR 0 )" ); //モデレータならOR 1,それ以外は OR 0      sql+=          string( isModerator( sid, uid ) ? " OR 1 )" : " OR 0 )" ); //モデレータならOR 1,それ以外は OR 0
4426      sql+=    ") AND ti.item_type_id!=" + unsignedIntToString( item::ITID_INDEX );      sql+=    ") AND ti.item_type_id!=" + unsignedIntToString( item::ITID_INDEX );
4427      sql += " AND tx.index_id=" + unsignedIntToString( xid );      sql+= " AND tx.index_id=" + unsignedIntToString( xid );
4428      sql += criteria2str( cri );      sql += criteria2str( cri );
4429      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );      syslog_printf( "\nsql at %d=%s", __LINE__, sql.c_str() );
4430      if( countResultRows( sql.c_str(), &count ) == RES_OK ){      if( countResultRows( sql.c_str(), &count ) == RES_OK ){
# Line 4815  bool getItemPermission( sessionid_t sid, Line 4833  bool getItemPermission( sessionid_t sid,
4833          sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );          sql+=      " AND ( certify_state=" + unsignedIntToString( index::CERTIFIED );
4834          sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0          sql+=            string( isModerator( sid, uid ) ? " OR 1" : " OR 0" ); //モデレータならOR 1,それ以外は OR 0
4835          sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?          sql+=            " OR tgulink.is_admin=1 )"; //グループ管理者か?
4836            if( uid != session_t::SID_GUEST ) sql+= " AND tgulink.uid=" + unsignedIntToString( uid );
4837          sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );          sql+=    " OR tx.open_level=" + unsignedIntToString( index::OL_PRIVATE );
4838          sql+=       " AND tx.uid=" + unsignedIntToString( uid );          sql+=       " AND tx.uid=" + unsignedIntToString( uid );
4839          sql+=    " OR " + string( isModerator( sid, uid ) ? "1" : "0" );          sql+=    " OR " + string( isModerator( sid, uid ) ? "1" : "0" );

Legend:
Removed from v.1.86  
changed lines
  Added in v.1.87

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26